zoukankan      html  css  js  c++  java
  • 8.2.1.4 Index Merge Optimization 索引合并优化

    8.2.1.4 Index Merge Optimization 索引合并优化

    索引合并方法用于检索行数通过几个range scans和merge 它们的结果集到一个结果集,

    merge 可以产生unions,intersections或者unions-of-intersections 它的依赖扫描。

    这种访问方法合并index scan 从一个单独的表,它不能合并跨越多个表的scan.

    合并一个表上的多个列的访问:

    在EXPLAIN 输出里,一个Index Merge 方法出现为index_merge 在类型列里。

    在这种情况下,索引列包含一个索引的列表。

    索引合并例子:

    SELECT * FROM tbl_name WHERE key1 = 10 OR key2 = 20;

    SELECT * FROM tbl_name
    WHERE (key1 = 10 OR key2 = 20) AND non_key=30;

    SELECT * FROM t1, t2
    WHERE (t1.key1 IN (1,2) OR t1.key2 LIKE ‘value%’)
    AND t2.key1=t1.some_col;

    SELECT * FROM t1, t2
    WHERE t1.key1=1
    AND (t2.key1=t1.some_col OR t2.key2=t1.some_col2);

    索引合并方法有几个算法:

    Using intersect(…)

    Using union(…)

    Using sort_union(…)

    下面的章节详细描述了这些方法:

    注意:

    index 合并优化算法有下面的不足之处:

    如果你的查询有一个复杂的WHERE 子句有很深的AND/OR 嵌套,

    MySQL 不能选择优化的执行计划,通过分散它们使用下面的规律:

    (x AND y) OR z = (x OR z) AND (y OR z)
    (x OR y) AND z = (x AND z) OR (y AND z)

    索引合并不能应用于全文索引:

    在MySQL 5.6.6之前, 如果一个range scan 是可能的在一些索引上,

    优化器不会使用 Index Merge Union or Index Merge Sort-Union algorithms.

    比如,考虑下面的查询:

    SELECT * FROM t1 WHERE (goodkey1 < 10 OR goodkey2 < 20) AND badkey < 30;

    8.2.1.4.1 The Index Merge Intersection Access Algorithm 索引合并交叉访问算法:

    次访问算法可以采用当一个WHERE 子句被转换成几个range 条件在不同的keys 用AND 连接,

    每个条件如下:

    在这种形式下,index 有确切的 N 部分(也就是说,所有的索引部分被覆盖):

    key_part1=const1 AND key_part2=const2 … AND key_partN=constN

    比如:

    SELECT * FROM innodb_table WHERE primary_key < 10 AND key_col1=20;

    SELECT * FROM tbl_name
    WHERE (key1_part1=1 AND key1_part2=2) AND key2=2;

    如果所有的列用于查询是被转换通过使用的索引,

    全表记录不是被检索的( EXPLAIN 输出包含使用Index 在额外的字段在这种情况下。

    SELECT COUNT(*) FROM t1 WHERE key1=1 AND key2=1;

    如果使用的索引不转换所有查询中使用的列, 全部的记录会被检索

    只有当range 条件对于所有使用的keys 是满足的

  • 相关阅读:
    MySQL+Toad for Mysql安装,配置及导入中文数据解决乱码等问题
    Excel日期格式提取year
    arcgis中使用excel中x,y坐标创建点问题
    GIS中栅格数据的拼接
    R 中安装xlsx包缺少java环境解决方案
    R中统计量的中英文解释
    arcgis离海距离的计算
    EXCEL处理数据小技巧
    nginx部署成功却没有办法访问
    Linux安装yum install gcc-c++出错:Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was 14: curl#6
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351295.html
Copyright © 2011-2022 走看看