mysql积累--索引
索引
参考:https://zhuanlan.zhihu.com/p/78982303
1. 概念
索引其实是一种排序的数据结构,能够帮助我们快速的检索数据库中的数据。索引建立经常使用的字段上(不仅仅是经常作为where条件的字段)
- 优点:索引可以提高查询的速度,但是创建和维护索引需要耗费时间,
- 缺点:索引会影响插入的速度,如果需要插入大量的数据时,最好是先删除索引,插入数据后再建立索引。
2. 分类
- index ---- 普通索引,数据可以重复,没有任何限制。
- unique ---- 唯一索引,要求索引列的值必须唯一,但允许有空值;如果是组合索引,那么列值的组合必须唯一。
- primary key ---- 主键索引,是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值,一般是在创建表的同时创建主键索引。
- 组合索引 ---- 在多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。
- fulltext ---- 全文索引,是对于大表的文本域:char,varchar,text列才能创建全文索引,主要用于查找文本中的关键字,并不是直接与索引中的值进行比较。fulltext更像是一个搜索引擎,配合match against操作使用,而不是一般的where语句加like。
注: 全文索引目前只有MyISAM存储引擎支持全文索引,InnoDB引擎5.6以下版本还不支持全文索引
所有存储引擎对每个表至少支持16个索引,总索引长度至少为256字节,索引有两种存储类型,包括B型树索引和哈希索引。
3. 两种索引类型
3.1 hash索引
- 把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可立刻定位到相应的位置,速度非常快。
- 哈希索引适合等值查询,但是无法进行范围查询
- 在有大量重复键值情况下,哈希索引的效率也是极低的,因为存在所谓的哈希碰撞问题(如果键值不是唯一的,需要先找到该键所在位置,然后再根据链表往后扫描,直到找到相应的数据;)
- 哈希索引也不支持多列联合索引的最左匹配规则
3.2 B+树索引
参考:https://blog.csdn.net/guanghuichenshao/article/details/81948438
聚簇索引和非聚簇索引,在查询数据的区别:
聚簇索引,就是将索引和数据放到一起,找到索引也就找到了数据,我们刚才看到的B+树索引就是一种聚簇索引。InnoDB引擎使用B+Tree作为索引结构(聚簇索引)
非聚簇索引就是将数据和索引分开,查找时需要先查找到索引,然后通过索引回表找到相应的数据。MyISAM引擎使用B+Tree作为索引结构(非聚集)
B+ Tree的叶子节点都可以存哪些东西:
B+树索引的关键字检索效率比较平均,不像B树那样波动幅度大
4. 生效条件
- 不跨列:对于复合索引(a,b, c),不要跨列或无序使用(最左匹配原则,a and c,a生效,c不生效;b and c,都不生效)。尽量使用全索引匹配(a,b,c)
- 不用不等号和is null: 对于复合索引(a,b, c),复合索引不能使用不等于(!= <>)或is null (is not null),否则自身以及右侧所有全部失效。(a and b > 5 and c,a和b生效,c不生效)
- 不使用or:尽量不要使用or,否则索引失效(or左侧的字段失效)
- 不进行运算:不要在索引上进行任何操作(计算、函数、类型转换),否则索引失效
- 不进行类型转换:尽量不要使用类型转换(显示、隐式),否则索引失效
- like不要以’%'开头:模糊查询时,使用%匹配时:’a%‘会使用索引,’%a‘不会使用索引, 这也是最左前缀匹配原则
尽量使用索引覆盖(using index)(a,b,c)
select a,b,c from xx..where a= .. and b =.. ;
数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用 B_TREE。B_TREE 索引加速了数据访问,因为存储引擎不会再去扫描整张表得到需要的数据;相反,它从根节点开始,根节点保存了子节点的指针,存储引擎会根据指针快速寻找数据。
mysql积累--索引相关推荐
- mysql性能优化较佳实践_MySQL性能优化的21个最佳实践 和 mysql使用索引
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...
- ySQL性能优化的21个最佳实践 和 mysql使用索引
MySQL性能优化的21个最佳实践 和 mysql使用索引 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 ...
- 面试官问:为什么MySQL的索引不采用Kafka的索引机制
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 第一眼看到这个问题,也是很迷惑的,谁没事会问这种问题.然而,事实上 ...
- 面试官:为什么MySQL的索引要使用B+树,而不是其它树?比如B树?
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 来源:https://dwz.cn/exC8JdQS InnoDB的一棵B+树可以存放多少行数 ...
- 为了把mysql的索引底层原理讲清楚,我把计算机翻了个底朝天
来自:非科班的科班 什么是索引 概念:索引是提高mysql查询效率的数据结构.总的一句话概括就是索引是一种数据结构. 数据库查询是数据库的最主要功能之一.设计者们都希望查询数据的速度能尽可能的快,因此 ...
- mysql多索引结构_MySQL 索引结构
谈到 MYSQL 索引服务端的同学应该是熟悉的不能再熟悉,新建表的时候怎么着都知道先来个主键索引,对于经常查询的列也会加个索引加快查询速度.那么 MYSQL 索引都有哪些类型呢?索引结构是什么样的呢? ...
- mysql repair 索引_mysql 创建索引、重建索引、查询索引、删除索引 转自:http://www.phpernote.com/mysql/942.html...
本篇文章主要是对MySQL索引操作方法做了一下总结,包括创建索引.重建索引.查询索引.删除索引的操作.以下所列示例中中 `table_name` 表示数据表名,`index_name` 表示索引名,c ...
- mysql简单索引_mysql简单索引
mysql的索引是在存储引擎实现的,而不是在服务器层,因此不是标准的. b-tree: 大部分的mysql支持b-tree索引,archive知道mysql5.1才支持,而且仅仅是支持单个auto_i ...
- mysql单列索引和多列索引_mysql 单列索引与多列索引
以下的文章主要介绍的是MySQL数据库索引类型,其中包括普通索引,唯一索引,主键索引与主键索引,以及对这些索引的实际应用或是创建有一个详细介绍,以下就是文章的主要内容描述. (1)普通索引 这是最基本 ...
最新文章
- 综合技术 --@Autowired和@Resource
- OpenStack部署
- linux高通平台代码,高通linux系统初始化
- Boost:是否支持sse4.1指令的测试程序
- 计算机运维知识题库,(哭求哥哥姐姐帮助一下)计算机维护笔试题库(辛苦了)...
- Visual Studio 2022发布了,我最爱的5大特性
- .NET Core开发日志——OData
- bagging算法_集成学习(Ensemble Learning)——Bagging与Random Forest(1)
- 清华2018顶级数据团队建设全景报告发布:Python最受欢迎,C语言含金量最高
- 【Python】BeautifulSoup导入lxml报错
- 初一数学教材人教版_【期中试卷+知识点总结】初中初一初二初三年级各科期中试卷+知识点总结...
- PHP上传图片重命名6种方案
- [USACO 2012 Feb Gold] Cow Coupons【贪心 堆】
- 线程池(ThreadPoolExecutor ) 的 创建、关闭、监控
- OkHttp Interceptors(二)
- batchplot插件用法_batchplot批量打印怎么用?Batchplot(CAD批量打印工具)安装步骤
- 判断数是否为素数与素数输出
- 小学计算机输入法主题教研设计,《拼音输入法》教学设计.doc
- 行驶证OCR识别360度全面解析
- java 多线程(三)