问题描述:
-- 根据类型(type)以及类型id(type_id)查询所有的在职人员(status=1)的id、姓名、岗位(post_name)以及部门id
SELECT
u.id,
realname,
s.title AS post_name,
new_groupid
FROM
crm_user u
LEFT JOIN crm_station s ON u.post = s.id
WHERE
type = 0
AND type_id = 0
AND u.`status` = 1
(1)在user表中对type字段添加索引;
(2)首先使用explain来查看一下SQL性能如下:
通过结果可以看出,虽然对type字段已经建立了索引,但是这个索引好像并没有起到作用,那么究竟是为什么呢?因为 type字段值的类型不多,就好比性别字段,除了1就是0,这种情况下影响结果集巨大,就会全表扫描,这种情况全表扫描还要快于利用索引。那如何继续使用索引呢?
解决方案:
SELECT
u.id,
realname,
s.title AS post_name,
new_groupid
FROM
crm_user u FORCE INDEX(type)
LEFT JOIN crm_station s ON u.post = s.id
WHERE
type = 0
AND type_id = 0
AND u.`status` = 1
(1)对type字段使用强制索引 FORCE INDEX(字段名称);
(2)再次使用explain来查看一下SQL性能如下: