mysql索引学习教程

 更新时间:2016年09月19日 08:45:17   作者:自由港  
在mysql 中,索引可以分为两种类型 hash索引和 btree索引。这篇文章主要介绍了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.对小的列创建索引。

相关文章

  • MySQL 从0到1打开数据库管理操作方法

    MySQL 从0到1打开数据库管理操作方法

    数据库管理系统(DataBase Management System)是用来创建数据库和管理数据库数据的一个管理软件,我们口头说的MySQL数据库就是这个管理系统,这篇文章主要介绍了MySQL从0到1打开数据库管理,需要的朋友可以参考下
    2023-06-06
  • MySQL日志文件详解

    MySQL日志文件详解

    这篇文章主要介绍了MySQL日志文件详解,本文分别讲解了错误日志、二进制日志、通用查询日志、慢查询日志、Innodb的在线redo日志、更新日志等日志类型和作用介绍,需要的朋友可以参考下
    2015-07-07
  • Mysql带And关键字的多条件查询语句

    Mysql带And关键字的多条件查询语句

    MySQL带AND关键字的多条件查询,MySQL中,使用AND关键字,可以连接两个或者多个查询条件,只有满足所有条件的记录,才会被返回
    2017-07-07
  • 一文详解SQL 中的三值逻辑

    一文详解SQL 中的三值逻辑

    这篇文章主要介绍了一文详解SQL中的三值逻辑,文章围绕主题展开对三值逻辑Null的详细介绍,感兴趣的小伙伴可以参考一下
    2022-09-09
  • mysql日常使用中常见报错大全

    mysql日常使用中常见报错大全

    MySQL初学者新安装好数据库及使用过程中经常遇到以下几类错误,本文给大家详细整理并给出完美解决方案,感兴趣的朋友跟随小编一起看看吧
    2023-03-03
  • Mysql之组合索引方法详解

    Mysql之组合索引方法详解

    这篇文章主要介绍了Mysql之组合索引方法详解,文中通过示例代码和查询结果展示介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • linux mysql 安装与操作

    linux mysql 安装与操作

    mysql是linux平台下最流行的数据库系统,今天介绍的是mysql的安装及简单的操作方法!
    2009-06-06
  • mysql实现模糊查询并按匹配程度排序

    mysql实现模糊查询并按匹配程度排序

    这篇文章主要介绍了mysql实现模糊查询并按匹配程度排序方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • MySQL几种更新操作的案例分析

    MySQL几种更新操作的案例分析

    本文将通过一个用户账户金额更新的案例分析几种数据更新的操作的优劣,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • pt-kill 常用杀进程参数介绍

    pt-kill 常用杀进程参数介绍

    这篇文章主要介绍了pt-kill 常用杀进程参数介绍,需要的朋友可以参考下
    2016-04-04

最新评论