zoukankan      html  css  js  c++  java
  • 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.对小的列创建索引。

  • 相关阅读:
    KVM_虚拟化技术
    Java面试题全集
    Web负载均衡与分布式架构
    Tomcat的目录结构和配置文件详解
    Apache HTTP Server 与 Tomcat 的三种连接方式介绍
    Java文件上传
    基础知识《十一》Java异常处理总结
    《转载》renameTo文件在windows环境下可以,在linux中报错
    《转载》Linux服务之搭建FTP服务器&&分布式文件服务器的比较
    oracle闪回数据
  • 原文地址:https://www.cnblogs.com/yg_zhang/p/5883457.html
Copyright © 2011-2022 走看看