select count(1) from
(SELECT a.id
FROM sys_user a LEFT JOIN cy_custinfo c ON a.cust_id = c.custId
INNER JOIN dingding_office do ON a.cust_id = do.cust_id AND a.office_id = do.dingding_id
WHERE a.login_name != '' AND a.system IS NULL AND a.del_flag = '0' )
tmp_count
数据只有几万条,查询却要7、8秒
统计总数,没必要外面套一层查询。
对一些查询的条件字段创建索引。
explain sql
查看索引使用情况
把这3个表的表结构贴出来看看,
尤其是这个cy_custinfo,如果它的custId也是唯一的话,那么根本就没必要再关联这个表了,因为它既没使查询结果增加行数,也没有使用过滤条件来减少数据;
如果它的custId不是唯一,那么你这个sql就有问题了,构造了一个笛卡尔积,数据翻倍。
所以假定是唯一,那么直接把这个表去掉,会发现sql变成了这样
select count(1)
from sys_user a, dingding_office do
where a.cust_id = do.cust_id
AND a.office_id = do.dingding_id
and a.login_name != ''
AND a.system IS NULL
AND a.del_flag = '0'
此时再要提升查询效率就应该从索引上着手了