为什么不符合最左匹配原则,会导致索引失效?

RT 
全部评论
CREATE TABLE `student` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `name` varchar(255) DEFAULT NULL,   `cid` int(11) DEFAULT NULL,   PRIMARY KEY (`id`),   KEY `name_cid_INX` (`name`,`cid`), ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 mysql创建复合索引的规则是首先会对复合索引的最左边的,也就是第一个name字段的数据进行排序,在第一个字段的排序基础上,然后再对后面第二个的cid字段进行排序。其实就相当于实现了类似 order by name cid这样一种排序规则。 所以:第一个name字段是绝对有序的,而第二字段就是无序的了。所以通常情况下,直接使用第二个cid字段进行条件判断是用不到索引的,当然,可能会出现上面的使用index类型的索引。这就是所谓的mysql为什么要强调最左前缀原则的原因。
点赞 回复 分享
发布于 2019-03-08 21:42
如果有一个索引  index(`name`,`phone`,`address`)   然后我select * from user where phone=123456 and address="abcd" 这个会用到索引吗?
点赞 回复 分享
发布于 2019-03-08 22:01
联合索引在添加时各字段按顺序添加进去的,如果不按顺序依次访问,会出现字段访问不准确,比如联合索引“a b c”为“235”与“146”,如果要实现利用索引查询,必须保证有序的索引字段,否则会出现联合索引失效
点赞 回复 分享
发布于 2019-03-08 21:27
我的猜想是因为组合索引是根据最左的数据来建立的,所以如果不是最左匹配原则,则无法用索引查询。不知道说得对不对,同求大神指教
点赞 回复 分享
发布于 2019-03-08 21:20

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务