mysql优化 - mysql 关联查询的时候使用的索引问题
PHPz
PHPz 2017-04-17 12:00:36
[MySQL讨论组]

user表:

user_right表:


user_right 添加了一个联合索引 (userid,chusheng)

SELECT * FROM user AS a LEFT JOIN user_right AS b ON a.id = b.userid WHERE b.chusheng = 1
我想使用user_right 表的这个索引 结果explain 没有使用到


为什么?我应该怎么做才能使用到user_right表中的索引

PHPz
PHPz

学习是最好的投资!

全部回复(2)
PHP中文网

首先,联合索引在顺序使用的情况下才可用到。你的情况需要单独建立chusheng的索引。

另外如果chusheng字段类型与查询不符,也是无法使用索引的。
比如chusheng是varchar,那查询需要使用 引号 括起的值,才可以用到索引。

例如:

SELECT * FROM user AS a LEFT JOIN user_right AS b ON a.id = b.userid WHERE b.chusheng = '1'

(是b.chusheng = '1'而不是 b.chusheng = 1)

伊谢尔伦

联合索引只有在查询时使用到其全部字段时,该索引才会被使用。

示例1

示例2

你这种情况要使用到 user_right 表中的索引需要从联合索引中去掉 user_id

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号