• 创建高性能索引笔记


    可以使用B-Tree索引的查询类型

    • 全值匹配 :和索引中的所有列进行匹配
    • 匹配最左前缀 :可只是用索引的第一列
    • 匹配列前缀 :也可以只匹配某一列的值的开头部分
    • 匹配范围值 :查找在某个范围的
    • 精确匹配某一列并范围匹配另外一列 :即第一列全批评,第二列范围匹配

    B-Tree索引的一些限制

    如果不是按照索引的最左列开始查询,则无法使用索引

    不能跳过索引中的列,只有索引中的1、3列缺失了第二列,则只能使用索引的第一列

    如果查询中有某个列的范围查询,则其右边的所有列无法使用索引进行优化查询

    高性能索引的策略

    • 独立的列

            ”独立的列“ 是指索引列不能是表达式的一部分,也不能是函数的参数

    • 前缀索引和索引的选择性

            有时需要索引很长的字符列,这会让索引变得大且慢。一个策略是模拟哈希索引,通常还可以索引开始的部分字符,这里需要选择合适的前缀长度,使前缀的选择性达到完整列的选择性,计算方式

    SELECT COUNT(DISTINCT city)/COUNT(*) FROM sakila.city_demo;
    
    +----------------------------------------+
    |COUNT(DISTINCT city)/COUNT(*)    |
    +----------------------------------------+
    |                                       0.0312    |
    +----------------------------------------+
    
    SELECT COUNT(DISTINCT LEFT(city, 3))/COUNT(*) AS sel3,
           COUNT(DISTINCT LEFT(city, 4))/COUNT(*) AS sel4,
           COUNT(DISTINCT LEFT(city, 5))/COUNT(*) AS sel5,    
           COUNT(DISTINCT LEFT(city, 6))/COUNT(*) AS sel6,
           COUNT(DISTINCT LEFT(city, 7))/COUNT(*) AS sel7,
    FROM sakila.city_demo;
    
    +--------------------------------------------------+
    |sel3      |sel4       |sel5      |sel6      |sel7       |
    |0.0239  |0.0293  |0.0305  |0.0309  |0.0310  |
    +-------------------------------------------------+

    查询显示达到7的时候再曾经长度,提升的效果已经很小了

    • 多列索引
    • 选择合适的索引列顺序
    • 聚簇索引,innodb的数据存储方式
  • 相关阅读:
    VBA Exit Do语句
    VBA Exit For语句
    VBA Do...While循环
    VBA While Wend循环
    VBA For Each循环
    VBA for循环
    sqoop 教案
    Hbase 取数据 和放数据 使用mr
    Hbase 四种过滤器
    Hbase java API 的方法
  • 原文地址:https://www.cnblogs.com/mliudong/p/3235022.html
Copyright © 2020-2023  润新知