我是靠谱客的博主 小巧电脑,最近开发中收集的这篇文章主要介绍mysql索引的艺术 单列索引与多列索引的区别,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

CREATE TABLE `security_role_resource` (
`id` varchar(50) NOT NULL DEFAULT '',
`role_id` varchar(50) DEFAULT NULL,
`resource_id` varchar(50) DEFAULT NULL,
`date_create` timestamp NULL DEFAULT NULL,
`date_update` timestamp NULL DEFAULT NULL,
`date_delete` timestamp NULL DEFAULT NULL,
`parent_shop_code` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `index_role_id` (`role_id`),
KEY `index_resource_id` (`resource_id`),
KEY `index_parent_shop_code` (`parent_shop_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `security_role_resource2` (
`id` varchar(50) NOT NULL DEFAULT '',
`role_id` varchar(50) DEFAULT NULL,
`resource_id` varchar(50) DEFAULT NULL,
`date_create` timestamp NULL DEFAULT NULL,
`date_update` timestamp NULL DEFAULT NULL,
`date_delete` timestamp NULL DEFAULT NULL,
`parent_shop_code` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `index_parent_shop_code_role_id_resource_id` (`parent_shop_code`,`role_id`,`resource_id`),
KEY `index_role_id` (`role_id`),
KEY `index_resource_id` (`resource_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

两个表的区别在于第二表是组合索引,组合了`parent_shop_code`,`role_id`,`resource_id`三列

单独的每个有索引的列查询没有区别,但是如果多个条件一起查询

explain select * from security_role_resource2 where parent_shop_code='002142' and resource_id='PNqiYZbiNN' and role_id='GBcvY87pCq' ;

mysql的处理方式不一样了,它会选择一个最严格的索引来进行检索,可以理解为检索能力最强的那个索引来检索,另外几个索引利用不上了,这样效果就不如多列索引了。

现在同样的查询条件对第一个表查询

explain select * from security_role_resource where parent_shop_code='002142' and resource_id='PNqiYZbiNN' and role_id='GBcvY87pCq' ;

下面这样的查询用不到组合索引:

explain select * from security_role_resource where parent_shop_code='002142' or role_id='GBcvY87pCq';

 

转载于:https://www.cnblogs.com/bigtiger/p/6061123.html

最后

以上就是小巧电脑为你收集整理的mysql索引的艺术 单列索引与多列索引的区别的全部内容,希望文章能够帮你解决mysql索引的艺术 单列索引与多列索引的区别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部