首页 > 代码库 > MySQL SQL优化

MySQL SQL优化

一、优化数据库的一般步骤:

  (A) 通过 show status 命令了解各种SQL的执行频率。

  (B) 定位执行效率较低的SQL语句,方法两种:

    事后查询定位:慢查询日志:--log-slow-queries=[file_name],

    事中查询状态:show processlist命令查看当前进行的线程,包括锁表情况

  (C) 通过EXPLAIN 或 DESC 分析低效SQL的执行计划

技术分享

技术分享

  (D) 确定问题并采取优化措施

二、索引问题

  (A) MyISAM存储引擎的表的数据和索引是自动分开存储的,各自独立的一个文件;InnoDB存储引擎的表的数据和索引在一个表空间里,但可以有多个文件组成。

  (B) MySQL中索引的存储类型目前只有BTREE和HASH两种,具体和表引擎有关。支持前缀索引。

  (C) 对于多列索引,最左前缀的成立条件要注意,必须是最左边的列。

  (D) like查询,是常量且通配符不是第一个字符时,才能使用索引。

  (E) 对大文件进行搜索,建议采用全文索引,

  (F) 如果列名是索引,使用 column_name is null 将使用索引。

  (G) or分割的条件中,如果不是两个都有索引,就不会使用索引。

  (H) 如果列类型是字符串,一定记得把字符串常量值用引号括起来,否则不使用索引。

三、查看索引使用情况

  如果索引有效,Handler_read_key的值将很高,代表了一个行被索引值读的次数,

  Handler_read_rnd_next 表示数据文件读下一行的请求数,值高意味着查询运行低效。

四、两个简单实用的优化方法

  (A) 定期分析表和检查表

五、常见SQL的优化

  (A) 大批量插入数据,

    通过控制索引的开启和关闭来提升速度。

    控制导入数据的排列顺序来提升速度。

    通过开启和关闭唯一性校验来提升速度。

    通过开启和关闭自动提交属性来提升速度。

  (B) 通过 order by null 消除排序的时间消耗

  (C) 优化嵌套查询:连接查询比子查询更有效率:子查询需要在内存中建立临时表。

  (D) or 条件的每个条件列都必须有索引,才使用索引。

  (E) 使用SQL提示,

  

 

    

 

  

MySQL SQL优化