zoukankan      html  css  js  c++  java
  • 8.2.1.5 Engine Condition Pushdown Optimization

    8.2.1.5 Engine Condition Pushdown Optimization

    这种优化改善了直接比较在一个非索引列和一个常量的效率,在这种情况下,条件被推入到存储引擎进行评估,

    这种优化只能用于NDB 存储引擎:

    对于MySQL Cluster, 优化器能消除发送不匹配记录的需要通过cluster质检的数据节点,

    可以加快查询速度

    假设一个MySQL Cluster 表定义如下:

    CREATE TABLE t1 (
    a INT,
    b INT,
    KEY(a)
    ) ENGINE=NDB;

    条件内推可以用于查询 如下, 其中包括一个比较在一个非索引列和常数之间:

    SELECT a, b FROM t1 WHERE b = 10;

    条件内推的使用可以看下面执行计划的输出:

    mysql> EXPLAIN SELECT a,b FROM t1 WHERE b = 10G
    ***************** 1. row *****************
    id: 1
    select_type: SIMPLE
    table: t1
    type: ALL
    possible_keys: NULL
    key: NULL
    key_len: NULL
    ref: NULL
    rows: 10
    Extra: Using where with pushed condition

    然而, 推荐内推不能用于下面两个查询:
    SELECT a,b FROM t1 WHERE a = 10;

    SELECT a,b FROM t1 WHERE b + 1 = 10;

    条件内推不适用于第一个查询因为 一个索引已经在a列上,(一个索引访问方法比条件内推更有效)

    条件内推不能用于第2个查询 因为由于间接的涉及非索引列b(然而,条件内推可以应用如果你reduce b + 1=10为b=9在where子句

    里).
    条件内推可以应用当一个列是和一个常数比较使用>或者<操作符:

    mysql> EXPLAIN SELECT a, b FROM t1 WHERE a < 2G
    ***************** 1. row *****************
    id: 1
    select_type: SIMPLE
    table: t1
    type: range
    possible_keys: a
    key: a
    key_len: 5
    ref: NULL
    rows: 2
    Extra: Using where with pushed condition

    其他支持比较的条件内推如下:

    column [NOT] LIKE pattern

    pattern 必须是一个字符串,其文本中包含的模式被匹配:

    column IS [NOT] NULL

    column IN (value_list)

    在value_list中的每个值 必须是一个常量,常量值

    在所有的情况下,先前处理的列表, 它是可能的对于条件被转换成一个或者多个直接比较的形式在一个列和一个常量之间:

    引擎条件内推默认是启用的,在启动的时候关闭它,设置参数optimizer_switch 在my.cnf 使用下面行:

    [mysqld]
    optimizer_switch=engine_condition_pushdown=off
    At runtime, enable condition pushdown like this:

    SET optimizer_switch=’engine_condition_pushdown=off’;

    限制,存储条件内推受以下限制:

  • 相关阅读:
    数据结构——数据结构的起源和研究内容
    数据结构——学习数据结构的意义
    C++中动态内存申请的结果
    C++中函数异常规格的说明
    C++异常处理的深入理解
    NOIP 2012 Day2
    NOIP 2012 Day1
    NOIP 2011 Day2
    NOIP 2011 Day 1
    NOIP 2010
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351294.html
Copyright © 2011-2022 走看看