FAQ
MySQL并行查询优化应用场景常见问题如表1所示。
序号 |
问题 |
答案 |
---|---|---|
1 |
MySQL并行查询优化的应用场景的白名单格式中,where和limit是必选项吗? |
不是。MySQL并行查询优化的应用场景的白名单格式中,select和from是必选项,where、group by、having、order by和limit都是可选项。 |
2 |
MySQL并行查询优化的触发条件一定要满足白名单的格式吗? |
是。 |
3 |
部分semi join查询不支持并行查询,可以举例吗? |
semi join查询中涉及复杂子查询或特殊连接操作的场景,可能不支持并行查询。例如:多级嵌套的子查询,以及涉及不常见的连接操作,例如anti join(not exists的变体)。 |
4 |
使用hint语法进行并行查询,还需要满足白名单吗? |
需要。并行查询的触发条件一定要满足白名单的格式。 |
5 |
在系统参数满足条件情况下,满足白名单格式是一定会触发并行查询吗? |
会触发。 |
6 |
如何判断查询有没有触发并行查询? |
查看执行计划,执行计划中会出现parallel关键字。 |
7 |
并行查询的四个状态变量PQ_threads_running、PQ_memory_used、PQ_threads_refused或PQ_memory_refused是否能作为并行查询触发的观察点? |
四个状态变量中的PQ_threads_running可作为并行查询触发的观察点。如果执行并行查询,PQ_threads_running的值会变大;查询结束后,PQ_threads_running的值将恢复。 |
8 |
满足白名单、并行查询的开关打开且阈值为0的情况下,如果t1中只有一条数据(例如:select * from t1;),会触发并行查询吗? |
只有一条数据会被认为是const表,不会触发并行查询。超过一条数据则会触发并行查询。但是,如果数据太少,触发了并行查询没有意义,性能反而会更差。 |
9 |
并行查询的应用场景,多表白名单中,多表的联合方式,写法只能是“t1,t2;”吗,是否有其他写法? |
写法不限于“t1,t2;”。具体支持哪些联合方式取决于数据库的查询优化器和执行计划生成策略。 例如“SELECT t1.a, t2.b FROM t1 INNER JOIN t2 ON t1.id = t2.id;”,如果t1和t2满足并行查询的单表条件,那么这条查询可能会触发并行查询。 |
10 |
如果关联的字段在两个表上分别有索引,或者条件里分别用了两个表上的索引,这种情况会发生索引归并而不能触发并行查询吗? |
这种情况下,如果满足索引归并的条件,会触发索引归并。索引归并优化是针对单表的优化,当一个表同时使用多个索引进行条件扫描时,可能会触发索引归并优化。可以通过查询执行计划确认是否触发了索引归并。当触发了索引归并时,则不会触发并行查询。 |