mysql数据库优化与mysql在web性能优化
一个自动分析是否需要使用索引的命令:explain
Example: explain select * from emp where id = 9;
索引的分类:
主键索引(primary key)
唯一键索引(unique)
Index(普通索引)
全文索引(fulltext)
复合索引(多列和在一起)
在那些列上添加索引比较合适:1、比较频繁的作为查询条件的字段应该加上索引 2、 唯一性比较差的字段不适合单独创建索引,及时频繁作为查询条件 3、 更新非常频繁的字段不适合创建索引 4、 不会出现在where子句中的字段不该创建索引 查询一个表中的所有索引: show indexes from table(表名) 索引的使用: 查询要使用索引最重要的条件是查询条件中需要使用索引 以下几种情况可能会使用到索引 1、 对于创建的多列索引,只要查询条件使用了最左边的列,索引一般就会被使用 2、 对于使用like的查询,查询如果是‘%aaa’不会使用到索引‘aaa%’会使用到索引 以下的表中将不使用索引 1、 如果条件中有or,即使其中有条件带索引也不会使用 2、 对于多列索引,不是使用的第一部分,则不会使用索引 3、 Like查询是以%开头 4、 如果列类型是字符串,那么一定要在条件中将数据使用引号引起来,否则不使用索引。 5、 如果mysql估计使用全表扫描要比使用索引快,则不使用索引。 查看索引的使用情况 Show status like ‘handler_read%’;
只有handler_read_key 越大越好
Handler_read_rnd_next 越小越好
数据库类型:
MyISAM 不支持事务和外键,一张表由三个文件组成,.frm .myi .myd
innoDB 支持事务和外键
对于MyISAM来说查询快,不过删除字段时空间是不会释放的,必须使用手动释放 optimize table table_name
数据库分表:
1、 水平分表
2、 垂直分表:
Stu表:id Name Pass Photo Mark表 Id Sid Question answer 垂直分表针对于关联类型的表,比如说,有一个学生的个人信息(有头像)表,一个考试信息(考试题和答案)表,这时我想查一个学生的考试分数和个人信息,那么mysql会将学生的个人信息和考试信息表关联,速度回降低很多,所以要将考试信息中的答案和题目分开在创建一个表,如果在提高还可以将头像分开为一个单独的表(如百度单独的图片服务器) 读写分离:

Web程序慢,首先的一个检测对象就是数据库,写过几年程序的都知道。现在想追踪MySQL中那些拖累服务器性能的SQL语句,怎么办?需要开启一个慢查询输出的一个机关:log_slow_queries。可以在MySQL配置文件中(my.ini/my.cnf)中设置,也可以通过MySQL客户端临时设置。第二种方法的好处是,可以不用重启MySQL服务,而使设置生效。那就来试试这个:
首先通过客户端连接到Mysql服务器,然后输入下面的语句:
SET GLOBAL log_slow_queries = ON;
SET GLOBAL long_query_time = 3;
这样MySQL就会把耗时>=3秒的SQL语句给记录下来,并输出到一个慢查询日志文件中。问题来了,这个慢查询日志文件在什么地方呢?如下,在MYSQL客户端中执行下面的语句:
show variables like 'slow_query_log_file';
就会看到MySQL慢查询日志文件位置。我的是:/usr/local/mysql/data/host-slow.log






