sql1:
SELECT
count(*)
FROM
t_order T FORCE INDEX(cc)
where
T.del_status = '0'
and T.is_project_order = '0'
and T.firstperson = ''
AND T.serverUserId = 'cdbcd902dbe411e89c777cd30ae00302
执行计划:
sql2:
select
count(T.id)
from t_order T
where
T.is_project_order = '0'
and T.del_status = '0'
and T.`status` not in ( 'ORDERCOMPLETE')
执行计划:
t_order表 索引
请教如何优化到1s内
目前百万数据库中执行下来是2s多
SELECT count(1) FROM (SELECT T.id from from t_order T WHERE T.is_project_order = '0' and T.del_status = '0'
and T.`status` not in ( 'ORDERCOMPLETE'))
加全覆盖索引 也就是说 把where子句后面条件涉及到的列 按照从左到右的顺序添加到索引中
加联合索引试一下。。。。
昨天给你的建议你毫无反应,是没听懂还是觉得不靠谱...mysql的优化途径没那么多,无非那几个方面,如果你有DBA权限的话,还可以从配置上优化,但是你提供的信息还是不够,比如说你的表结构,你的sql是不是动态的等等,都需要考虑,包括条件字段的一些信息。
尽量少用not in(用in来代替),然后用索引的字段不能有空值,否则索引无效。