zoukankan      html  css  js  c++  java
  • mysql前缀索引

    应用场景:

    数据库里有个地址(address)字段,类型为varchar(100),业务决定了要经常根据address来进行查询。

    确定选择性:

    Sql代码 

    SELECT count(DISTINCT(address))/count(*) AS Selectivity FROM info;   

    +-------------+    

    | Selectivity |   

    +-------------+    

    |      0.8745 |   

    +-------------+   

    <address>选择性很好,但是长度为100,对整个字段建立索引显然不合适,可以考虑建立前缀索引,例如<left(address,5)>,看看其选择性:  

    Sql代码 

    SELECT count(DISTINCT(left(address,5)))/count(*) AS Selectivity FROM info;   

    +-------------+    

    | Selectivity |   

    +-------------+    

    |      0.5981 |   

    +-------------+    

    选择性还不错,但和0.8745相比还是太低,所以我们可以将前缀长度增加到10,再看看选择性:

    Sql代码 

    SELECT count(DISTINCT(left(address,10)))/count(*) AS Selectivity FROM info;   

    +-------------+    

    | Selectivity |   

    +-------------+    

    |      0.8239 |   

    +-------------+   

    和0.8745已经很接近了,但是索引长度只有10,所以就可以决定建立前缀索引了。

    前缀索引兼顾索引大小和查询速度,但是其缺点是不能用于ORDER BY和GROUP BY操作(会产生慢查询),也不能用于Covering index(即当索引本身包含查询所需全部数据时,不再访问数据文件本身)。

    建立前缀索引:

    alter table test.test add key (address(10));

  • 相关阅读:
    wpf-x-指令元素
    意法半导体STM32单片机特性
    非易失性存储器MRAM的两大优点
    静态SDRAM和动态SDRAM的区别
    使用SRAM如何节省芯片面积
    不同类别存储器基本原理
    串口SRAM和并口SRAM的引脚区别
    SRAM存储器芯片地址引脚线短路检测方法
    2020年国内MCU市场有望突破500亿元
    MRAM可以替代NOR或SRAM
  • 原文地址:https://www.cnblogs.com/tudou1223/p/5203596.html
Copyright © 2011-2022 走看看