MySQL優化之強制索引的使用

問題描述:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章