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

标签:mysql,索引
0
投稿

猜你喜欢

  • 解构用户研究

    2010-03-15 12:34:00
  • Elasticsearches通过坐标位置实现对附近人的搜索

    2023-05-23 16:16:12
  • 15行Python代码带你轻松理解令牌桶算法

    2021-05-05 01:18:05
  • 安装Mysql5.7.10 winx64出现的几个问题汇总

    2024-01-28 13:16:04
  • python实现人脸识别经典算法(一) 特征脸法

    2021-07-15 11:35:03
  • 详细解读python操作json文件的详细

    2021-01-31 10:41:42
  • JS实现文字放大效果的方法

    2024-04-25 13:09:52
  • Python3以GitHub为例来实现模拟登录和爬取的实例讲解

    2022-01-17 14:52:02
  • Python Django 命名空间模式的实现

    2023-10-06 05:34:28
  • python 自动化将markdown文件转成html文件的方法

    2021-09-16 16:04:40
  • python将原图裁剪为固定尺寸小图

    2022-01-11 00:51:51
  • Numpy(Pandas)删除全为零的列的方法

    2022-07-23 13:13:59
  • 线上问题排查之golang使用json进行对象copy

    2023-10-06 05:03:23
  • Python图像处理之透视变换的实战应用

    2022-08-16 17:22:10
  • JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解

    2024-04-22 22:13:35
  • python 字典和列表嵌套用法详解

    2022-04-12 10:58:12
  • pymongo实现控制mongodb中数字字段做加法的方法

    2021-12-15 21:04:06
  • 基于go+vue实现的golang每日新闻数据浏览与检索平台(推荐)

    2023-06-16 12:11:26
  • Python3之简单搭建自带服务器的实例讲解

    2022-03-05 20:50:33
  • python中altair可视化库实例用法

    2021-04-21 17:32:54
  • asp之家 网络编程 m.aspxhome.com