查询数据库的性能参数
优化查询
分析查询语句
索引对查询的影响
有几种特殊情况下,索引会失效
1、使用LIKE关键字的语句
如果匹配字符的第一个字符为%,索引会失效;只有%不是第一个字符时,索引才起作用。
2、使用多列索引查询语句
只有查询条件中使用了组合索引的第一个字段,索引才会被使用。
3、使用OR关键字的查询语句
查询语句的查询条件中,使用OR关键字时,只有OR前后两个条件的列都是索引列时,才会使用索引。
优化子查询
执行子查询时,MySQL需要为内层查询语句的查询结果创建一个临时表,然后外层从临时表读数据,查询完毕后再撤销这些临时表。因此子查询的速度会收到影响。
在MySQL中,可以用JOIN代替子查询,连接查询不需要创建临时表,速度比子查询快。如果有索引,性能会更好。
优化数据结构
数据库结构设计,需要考虑数据冗余、查询、更新的速度、字段的类型是否合理等多方面内容。
优化查询速度
1、将字段很多的表分成多个表
将使用频率很低的字段分拆出来一个新表。
2、增加中间表
对于需要经常联合查询的表,可以建立中间表提高查询效率。通过建立中间表,把需要经常查询的数据插入到中间表中,然后将原来的联合查询改成对中间表的的查询。
3、增加冗余字段
合理增加冗余字段可以提高查询速度。
优化插入数据速度
插入记录时,影响插入速度的主要是 索引、唯一性校验、一次插入记录条数等。
对于MyISAM引擎的表常见的优化方法
1、禁用索引
对非空表插入记录时,数据库会根据记录建立索引。如果插入大量数据,建立索引会影响插入速度。可以在插入之前禁用索引,数据插入完成后再开启索引。对空表则不需要,MyISAM引擎的表是在数据导入之后建立索引的。
禁用索引的语句
重新开启索引语句
2、禁用唯一性检查
插入记录时,唯一性校验也会降低插入速度。可以在插入之前禁用唯一性检查,等到插入完毕后再开启。
禁用唯一性检查的语句
开启唯一性检查的语句
3、使用批量插入
这种方式比一条一条插入要快。
4、使用LOAD DATA INFILE批量导入
需要批量导入时,能使用该语句尽量使用,它的速度比INSERT要快。
对于InnoDB引擎的表常见的优化方法
1、禁用唯一性检查
2、禁用外键检查
插入前禁用外键检查,插入完成后再开启。
禁用外键检查的语句:
开启外键检查的语句:
3、禁止自动提交
插入前禁止事务自动提交,插入完成后,恢复自动提交
禁用自动提交语句:
恢复自动提交语句