Mysql中的联合索引、前缀索引、覆盖索引
2024-08-28 07:46:34
索引
索引是一种特殊的文件,它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。
联合索引
又名复合索引,由两个或多个列的索引。它规定了mysql从左到右地使用索引字段,对字段的顺序有一定要求。一个查询可以只使用索引中的一部分,更准确地说是最左侧部分(最左优先)。如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。
CREATE TABLE test(a INT, b INT, c INT, KEY(a, b, c));
- 1
前缀索引
对于列的值较长,比如BLOB、TEXT、VARCHAR,就必须建立前缀索引,即将值的前一部分作为索引。这样既可以节约空间,又可以提高查询效率。但无法使用前缀索引做 ORDER BY 和 GROUP BY,也无法使用前缀索引做覆盖扫描。
# 语法
ALTER TABLE table_name ADD KEY(column_name(prefix_length));
# 示例
ALTER TABLE city ADD KEY(cityname(7))
- 1
- 2
- 3
- 4
覆盖索引
跟联合索引有点类似,就是在查询t的时候只用去读取索引而取得数据,无需进行二次查询相关表。这样的索引的叶子节点上面也包含了他们索引的数据。
判断标准:使用explain,可以通过输出的extra列来判断,对于一个索引覆盖查询,显示为using index,MySQL查询优化器在执行查询前会决定是否有索引覆盖查询。
最新文章
- [.net 面向对象程序设计进阶] (23) 团队开发利器(二)优秀的版本控制工具SVN(上)
- Flask最佳实践
- strace命令跟踪进程
- 【循序渐进学Python】8.面向对象的核心——类型(下)
- 关闭窗体后,利用StreamWriter保存控件里面的数据
- [转载]关于AutoCAD.NET的辅助方法
- UpdateData(false) and UpdateData(true)
- bzoj 3207 花神的嘲讽计划Ⅰ(哈希法+主席树)
- 一步步学习NHibernate(4)——多对一,一对多,懒加载(1)
- 解决embed标签显示在div上层【转藏】
- Grails重定向以及Render、Session的使用
- .Net平台-MVP模式初探(一)
- x86汇编语言实践(2)
- 美团App用户界面分析
- Module loader:模块加载器
- mongodb之 3.4.0 mongodb sharing 副本集群搭建
- 树莓派安装centos7
- 【SPL标准库专题(5)】 Datastructures:SplStack &; SplQueue
- CSS marging相关
- shell将字符串分隔成数组
热门文章
- HDU 1027 G - Can you answer these queries?
- SQL2000,2005,2008安装在一台机子上
- 关于rabbitmq的消息路由的同步问题
- H5的storage(sessionstorage&;localStorage)简单存储删除
- ABAP自定义功能函数
- 使用 Kendo UI 库实现对象的继承
- Android 读取excel 文件
- 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:2.技术简介之MinaFilter(1)
- 如何用Windows PowerShell替换命令提示符
- JavaScript_7_运算符