当前数据库运行有问题
- 运行
show full processlist
:查看当前正在运行的sql的执行情况,看是什么原因导致的,通常情况下,会有slow-sql存在
创建索引时需要注意
通过两种方式来查看已有索引:
show index from table_name
:查看table_name已有的索引show create table table_name
:查看建表语句,里边有索引创建语句
联合索引的最左原则:创建 a,b,c三个字段的联合索引意味着有a,a,b,a,b,c三个索引(看看mysql所有的算法就明白了),这个时候看下创建的索引是否被包含在内
- 对于一些区分性很差的字段不要添加所有,比如性别,年龄,添加所有效果不大,而且浪费存储空间
- 对于已有表,特别是大表(数据量比较大的表),添加多个所有,最好在一条语句中执行;对一个表添加2个索引时,如果分开执行2条DDL语句会比一条耗时很多;对于可用性很高的场景,通过备库来做(这个工作主要是DBA来执行);开发主要关心对sql进行合并,因为很多时候DBA只是帮你执行提交的sql
- 一定要注意不用重复创建索引(索引会增加存储,而且会影响插入及更新语句的执行速度)
查询优化
- 如果需要对一个添加所有的字段进行左模糊查询,可以考虑将此字段倒叙存放,通过reverse()方法来将需要查询的条件倒叙
- 对于慢查询,通过explain查询QEP,分析QEP(query execute plan),看索引是否合理
- 对于NULL值要谨慎对待,尽量不用NULL的使用,mysql不对null值索引