视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
mysql索引学习教程
2020-11-09 20:44:58 责编:小采
文档


在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.对小的列创建索引。

您可能感兴趣的文章:

  • PHP mysqli_free_result()与mysqli_fetch_array()函数详解
  • Mysql 5.7 服务下载安装图文教程(经典版)
  • MySql中的IFNULL、NULLIF和ISNULL用法详解
  • mysql5.x升级到mysql5.7后导入之前数据库date出错的快速解决方法
  • MySQL修改默认字符集编码的方法
  • MariaDB(MySQL)创建、删除、选择及数据类型使用详解
  • php mysql 封装类实例代码
  • mysql desc(DESCRIBE)命令实例讲解
  • 下载本文
    显示全文
    专题