問題描述:
-- 根據類型(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性能如下: