mysql查看冗余索引_mysql重复索引与冗余索引实例分析

本文实例讲述了mysql重复索引与冗余索引。分享给大家供大家参考,具体如下:

重复索引:表示一个列或者顺序相同的几个列上建立的多个索引。

冗余索引:两个索引所覆盖的列重叠

冗余索引在一些特殊的场景下使用到了索引覆盖,所以比较快。

场景

比如文章与标签表

+――+――-+――+

| id | artid | tag |

+――+――-+――+

| 1 | 1 | PHP |

| 2 | 1 | Linux |

| 3 | 2 | MySQl |

| 4 | 2 | Oracle |

+――+――-+――+

在实际使用中, 有2种查询

artid―查询文章的―tag

tag―查询文章的 ―artid

SQL语句:

select tag from t11 where artid=2;

select artid from t11 where tag='PHP';

我们可以建立冗余索引,来达到索引覆盖的情况,这样的查询效率会比较高。

1、建立一个文章标签表

这个表中有两个索引,一个是at,一个是ta,两个索引都用到了artid和tag两个字段。

CREATE TABLE `t16` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`artid` int(10) unsigned NOT NULL DEFAULT '0',

`tag` char(20) NOT NULL DEFAULT '',

PRIMARY KEY (`id`),

KEY `at` (`artid`,`tag`),

KEY `ta` (`tag`,`artid`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

2、测试两条SQL语句

select artid from t11 where tag='PHP';

这条语句的查询分析中的Extra有Using index,表示此处用到了索引覆盖,使用索引覆盖后就不需要回行查询数据,这样的查询效率比较高。

0444203d97123ecca14b5a6f86a4bc0e.png

select tag from t11 where artid = 1;

这条语句的查询分析中的Extra有Using index,表示此处用到了索引覆盖,使用索引覆盖后就不需要回行查询数据,这样的查询效率比较高。

288b9fc992da09d5b0dd933e6a0946e9.png

关于索引覆盖的详细内容可以查看前面一篇文章:索引覆盖

希望本文所述对大家MySQL数据库计有所帮助。

您可能感兴趣的文章:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值