目录
一. 分析列存储引擎层转换后的语法树, 发现exists子句没有存在
三. 寻找在哪出逻辑 zero_result_cause 值为"Impossible WHERE"
四. 分析为何 optimize_cond 函数将 select_lex->cond_value 设置为 Item::COND_FALSE
五. 分析 eval_const_cond 如何修改value
六. 分析cond此时的具体子类型, 如何执行val_int
七. 分析 Item_exists_subselect何时修改成员变量value
当通过subselect_indexsubquery_engine做scan_table时才会将value置为true
八. 在Item_exists_subselect最终的exec处理中, 最终去读索引
进一步的Tianmu::dbhandler::TianmuHandler::index_read堆栈
摘要:
mysql列存储引擎-exists子查询错误-问题定位分析
问题现象:
关联https://github.com/stoneatom/stonedb/issues/732
以下SQL在列存储引擎中查询结果为空, 但是在innodb引擎中却能查询出数据
select
o_orderkey
from
orders
where
o_orderdate >= date '1993-07-01'
and o_orderdate < date '1993-07-01' + interval '3' month
and exists (
select
*