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性能如下:

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