SQL慢可能的原因:
1、索引失效
CREATE TABLE `t2` (
`id` INT(11),
`a` varchar(64) NOT NULL,
`b` varchar(64) NOT NULL,
`c` varchar(64) NOT NULL,
`d` varchar(64) NOT NULL,
`f` varchar(64) DEFAULT NULL,
PRIMARY KEY(id),
UNIQUE KEY `f` (`f`),
KEY `idx_abc` (`a`,`b`,`c`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
explain排查
重点关注type:all全表扫描,index遍历全索引树扫描,要看是否没满足最左前缀法则
possible keys:可能用到的索引
key:用到的索引
Extra:using where:查询字段未被索引覆盖,
where条件未被索引覆盖explain select * from t2 where d = "ni";
或非联合索引前导列explain select d from t2 where b = "ni";
using index :使用了覆盖索引
using where,using index:查询字段索引覆盖,但where 条件没满足最左前缀或where的条件是前导列的一个范围explain select b from t2 where a in ('a','d','sd');
失效原因:
1、索引参与函数运算
2、不满足最左前缀
3、使用or并且两边存在>,<;如果两边都有索引且都是=操作不会失效
4、like '%b'
5、隐式类型转换,索引本来是varchar类型,用int找:select * from mytable where name = 1;
2、多表join
小表做驱动表,并建立合适的索引
做数据冗余,尽量避免关联查询
3、表数据量太大/数据库连接数不够:分库分表
4、查询字段太多:只查询关键字段