mysql 索引详细介绍
作者:自由港 发布时间:2024-01-17 22:35:52
mysql 索引详解:
在mysql 中,索引可以分为两种类型 hash索引和 btree索引。
什么情况下可以用到B树索引?
1.全值匹配索引
比如:
orderID="123”
2.匹配最左前缀索引查询
比如:在userid 和 date字段上创建联合索引。
那么如果输入 userId作为条件,那么这个userid可以使用到索引,如果直接输入 date作为条件,那么将不能使用到索引。
3.匹配列前缀查询
比如: order_sn like ‘134%' 这样可以使用到索引。
4.匹配范围值查询
createTime>'2015-01-09' and createTime<'2015-01-10'
5.精确匹配左前列并范围匹配另外一列
比如:
userId=1 and createTime>'2016-9-18'
6.只访问索引的查询,称为覆盖索引,及索引包括查询列的数据。
BTREE索引的限制
1.如果不是按照索引的最左列开始查找,则无法使用索引。
比如创建联合索引:
orderId ,createTime 字段创建联合索引,如果只是输入 createTIme的条件,没有orderid的条件,那么将不能使用此索引。
2.使用索引时不能跳过索引的列。
三列:
日期,姓名,电话 组成列和索引,如果查询时 只输入 日期 和电话,那么只能使用日期作为索引进行过滤。
3.NOT IN 和 <> 操作无法使用索引。
4.如果查询中有某个列的范围查询,则其右边所有列都无法使用索引。
hash 索引的特点
hash索引是基于hash表实现的,只有查询条件精确匹配hash 索引中的所有列时,才能使用hash索引。只能是等值查询。
对于hash索引中的所有列,存储引擎都会为每一行计算一个hash码,hash索引中存储的就是hash码。
限制:
1.必须两次读取,先读取hash 找到对应的行,再读取对应的行数据。
2.hash索引无法用于排序。
3.只支持精确查找,不支持部分索引查找,也不支持范围查找。
hash冲突:
hash 索引不能使用于选择性很差的字段,而要用在比如 选择性强的列上创建hash索引。
比如:不要在性别字段上创建hash索引。
为什么要使用索引?
1.索引大大减少存储引擎需要扫描的数据量。索引小于数据大小。
2.索引可以帮助我们进行排序以避免使用临时表。索引是有顺序的。
3.索引可以把随机的I/0 变为 顺序的IO
索引是不是越多越好?
1.索引会增加写操作的成本
2.太多的索引会增加查询优化器和选择时间。
建立索引的策略
1.索引列上不能使用表达式或函数
比如:
select * from product where to_days(out_date) –to_days(current_date)<=30,out_date为索引列。
改成:
select* from product where out_date<date_add(current_date,interval 30 day)
2.索引大小不能超过一定值。
inodb 索引列 大小为 200个长度。
3.前缀和索引列的选择性。
create index idx_NAME on table (account);
4.联合索引
如何选择索引列的顺序。
1.经常会被索引的列。
2.选择性高的里的列的优先。
3.对小的列创建索引。
感谢阅读此文,希望能帮助到大家,谢谢大家对本站的支持!
来源:http://www.cnblogs.com/yg_zhang/p/5883457.html


猜你喜欢
- 如果您的网站面向世界各地的冲浪者或者对外开展商贸活动,检测来访者的浏览器语言类型就非常现实了。这里提供的脚本可以检测流露;浏览器
- 前言Python 的字典有好多个名称("映射"、"哈希"、"散列"或者"
- 现在拥有了正则表达式这把神兵利器,我们就可以进行对爬取到的全部网页源代码进行筛选了。下面我们一起尝试一下爬取内涵段子网站:http://ww
- 本文实例讲述了Python面向对象程序设计类变量与成员变量、类方法与成员方法用法。分享给大家供大家参考,具体如下:类变量与成员变量在类中声明
- sql语句/*MySQL 消除重复行的一些方法---Chu Minfei---2010-08-12 22:49:44.660--引用转载请注
- MySQL的自增id都定义了初始值,然后不断加步长。虽然自然数没有上限,但定义了表示这个数的字节长度,计算机存储就有上限。比如,无符号整型(
- 本文实例讲述了mysql代码执行结构。分享给大家供大家参考,具体如下:本文内容:什么是代码执行结构顺序结构分支结构循环结构 首发日
- Python 变量类型 变量存储在内存中的值。这就意味着在创建变量时会
- 一、开始工具的安装1.git安装git工具有两种方式,一种就是利用自带包管理工具,一种是源码编译安装(1)由于CentOS已经具有包管理器因
- 程序能实现什么a.完成gap值的自定义输入以及两条需比对序列的输入b.完成得分矩阵的计算及输出c.输出序列比对结果d.使用matplotli
- 1.数据和日志文件分开存放在不同磁盘上数据文件和日志文件的操作会产生大量的I/O。在可能的条件下,日志文件应该存放在一个与数据和索引所在的数
- 引言: 由于MySQL的数据库太大,默认安装的/var盘已经再也无法容纳新增加的数据,没有办法,只能想办法转移数据的目录。 下面我整理一下把
- 大家好,今天在写代码的时候,遇到了这样一种情况。我有如下所示的几个类用来存放程序配置(其实当做命名空间来用,同时感觉能够继承方便一点),im
- 人工生命—群集智能—蚁群算法js版前言(摘自网上,代码是自己想出来的)对于普通大众来说,“人工生命”、“群集智能”、“仿生机器人”等等可能是
- 如果PyPi上搜html2text的话,找到的是另外一个库:Alir3z4/html2text。这个库是从aaronsw/html2text
- 一、SQL Server Row_number函数简介ROW_NUMBER()是一个Window函数,它为结果集的分区中的每一行分配一个连续
- DDP 数据shuffle 的设置使用DDP要给dataloader传入sampler参数(torch.utils.data.distrib
- 用python的matplotlib画图时,往往需要加图例说明。如果不设置任何参数,默认是加到图像的内侧的最佳位置。import matpl
- 前言数据驱动是一种思想,让数据和代码进行分离,比如爬虫时,我们需要分页爬取数据时,我们往往把页数 page 参数化,放在 for 循环 ra
- Keras提供了一些用ImageNet训练过的模型:Xception,VGG16,VGG19,ResNet50,InceptionV3。在使