Mysql优化面试题

来源:互联网 发布:php 打印数组内容 编辑:程序博客网 时间:2024/06/07 20:12
 最好的优化数据库表的方法就是不查询!!
  1. 对于可以不查的数据就不要查,既是可以查三列的数据,就不要查五列,甚至使用*来操作

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

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

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

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

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

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

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

  9. 对于左前缀不易区分的列 ,建立索引的技巧
    如url的索引建立,由于http://www.*.com 可以反转存,或者是伪哈希用crc32 将url转为一个数32位无符号整数,建立索引

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

    注意: 修复表的数据及索引碎片,就会把所有的数据文件重新整理一遍,使 之 对齐.这个过程,如果表的行数比较大,也是非常耗费资源的操作.
    所以,不能频繁的修复.如果表的Update操作很频率,可以按周/月,来修复.
    如果不频繁,可以更长的周期来做修复.

  11. sql语句的书写,如:如果在b上建立了索引 ,a没有
    “where a=1 and b=1”应该改为“where b=1 and a=1”提高效率

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

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

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

MySQL默认没有开启慢查询,开启:set global slow_query_log='ON';慢查询具体操作参考:http://www.emtalk.net/sql/mysql/395.html

慢慢总结面试mysql优化就不怕了,重在积累(…………..)

原创粉丝点击