MYSQL优化点一SQL语句,索引
找到慢查询sql语句
设置慢查询时间阙值,开启慢查询日志,但只能查看执行完的慢查询
用show processlist查看正在执行的慢查询
常见不走索引的场景
c列精确到时分秒
select c from tab where date©=‘2021-01-01’;
select c from tab where c+2=10;
where子句中的列名使用了函数操作或运算操作不走索引。即使列名有索引,但添加操作后,mysql认为与其一个一个对索引进行函数转化,倒不如走全表扫描效率更高
优化;可以试试范围查询
select c from tab where c>=‘2021-01-01 00:00:00’ and c<=‘2021-01-02 00:00:00’ ;
c列是字符列
select c from tab where c=111;
隐式转换不走索引。mysql默认字符串向整型进行转换,与其一个一个对索引进行转换,倒不如走全表扫描效率更高
优化:该是啥就用啥
select c from tab where c=‘111’;
c列是整型列select c from tab where c=‘111’;可以走索引,转换的是值不是索引
select c from tab where c like ‘%111%’;
前导模糊查询不走索引。mysql:前导模糊还查个锤子,我都不知道开头咋下手,倒不如走全表扫描效率更高
优化:如果可以尽可能把开头的%去掉,实在不行就算了
select * from tab where c>=1 and c <=2000;
范围查询某些情况不走索引。单次查询的数据量过大,优化器将不走索引
优化:一口气吃不成胖子,分段查
select * from tab where c>=1 and c <=1000;
select * from tab where c>1000 and c <=2000;