重复索引与冗余索引
来源:互联网 发布:淘宝规则 新规 编辑:程序博客网 时间:2024/06/05 02:25
重复索引:表示一个列或者顺序相同的几个列上建立的多个索引。
冗余索引:两个索引所覆盖的列重叠
冗余索引在一些特殊的场景下使用到了索引覆盖,所以比较快。
场景
比如文章与标签表
+——+——-+——+
| 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,表示此处用到了索引覆盖,使用索引覆盖后就不需要回行查询数据,这样的查询效率比较高。
select tag from t11 where artid = 1;
这条语句的查询分析中的Extra有Using index,表示此处用到了索引覆盖,使用索引覆盖后就不需要回行查询数据,这样的查询效率比较高。
关于索引覆盖的详细内容可以查看我的另一篇文章:索引覆盖
0 0
- 重复索引与冗余索引
- MySQL查找重复索引和冗余索引
- 查找冗余或重复的索引
- MySQL查询重复及冗余索引sql
- MySQL冗余索引清理规则
- sql优化之:数据库索引创建原则,or/in/union与索引优化,聚集索引/非聚集索引/联合索引/索引覆盖,MySQL冗余数据的三种方案,MySQL双主一致性架构优化(来源:架构师之路)
- 查找重复的索引
- mysql检测重复索引
- 索引损坏与重建索引
- 分区索引与全局索引
- 索引扫描与索引查找
- 索引合并与增量索引
- 索引扫描与索引查找
- 全局索引与分区索引
- 稠密索引与稀疏索引
- 索引扫描与索引查找
- 索引
- 索引
- Tiling
- Node.js 模块之【mongoose】MongoDB操作模块
- 深度学习培训班路线
- 无网络不生活,给您讲述会说话的无线wifi
- 用递归输出一维数组的全排列
- 重复索引与冗余索引
- java.lang.IllegalArgumentException org.springframework.asm.ClassReader.
- 位运算
- LA4287 Proving Equivalences 强连通分量
- 基于How To Tango With Django 1.9的重新实践(11)——User Authentication with {#chapter-redux}
- PHP总结日记2(php课程精炼)!
- 算法导论 练习题 2.3-7
- 正则表达式在Android中的使用
- AngularJS 1,AngularJS 2,Vue 1 ,Vue 2, React之间的区别和优劣势比较