您的位置:首页 > 职场人生

Mysql优化面试题

2017-05-31 10:40 309 查看
最好的优化数据库表的方法就是不查询!!


对于可以不查的数据就不要查,既是可以查三列的数据,就不要查五列,甚至使用*来操作

对于查询操作比较频繁的字段,添加使用索引,提高查询的速度

避免用null,null要用特殊的字节来标注,不利于索引,尽量设置为not null,

能够使用定长满足的就使用定长,如varchar(20) 能解决不要用varchar(100)

索引并不是越多越好,索引可以提高 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6

加多列联合索引如 index(a,b,c)

应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描

常用字段和不常用字段要分离.,需要结合网站具体的业务来分析,分析字段的查询场景,查询频度低的字段,单拆出来.

对于左前缀不易区分的列 ,建立索引的技巧

如url的索引建立,由于http://www.*.com 可以反转存,或者是伪哈希用crc32 将url转为一个数32位无符号整数,建立索引

使用optimize table 表名 ,可以定期优化数据表.

注意: 修复表的数据及索引碎片,就会把所有的数据文件重新整理一遍,使 之 对齐.这个过程,如果表的行数比较大,也是非常耗费资源的操作.

所以,不能频繁的修复.如果表的Update操作很频率,可以按周/月,来修复.

如果不频繁,可以更长的周期来做修复.

sql语句的书写,如:如果在b上建立了索引 ,a没有

“where a=1 and b=1”应该改为“where b=1 and a=1”提高效率

不论性能如何,不要有子查询和嵌套SQL,尽量不要有join查询,一条大的sql,如果可以分成几个小SQL顺序执行,分了吧,速度会快很多

使用explain命令,观察type列,可以知道是否是全表扫描,和索引的使用形式,观察key可以知道使用了哪个索引,观察key_len可以知道索引是否使用完成,观察rows可以知道扫描的行数是否过多,观察extra可以知道是否使用了临时表和进行了额外的排序操作

查看慢查询日志,找出执行时间长的SQL试着优化去吧~~

MySQL默认没有开启慢查询,
开启:set global slow_query_log='ON';

慢查询具体操作参考:http://www.emtalk.net/sql/mysql/395.html


慢慢总结面试mysql优化就不怕了,重在积累(…………..)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: