【问题标题】:How to use mysql query optimzer hints in Yii2?如何在 Yii2 中使用 mysql 查询优化器提示?
【发布时间】:2021-08-02 07:51:05
【问题描述】:

我偶然发现了 optimizer hints MySQL 功能 here,我不知道它存在,并试图弄清楚如何将其与 Yii2 一起使用。

MySQL 支持使用optimizer hints 设置特定选项,例如:

SELECT /*+ NO_RANGE_OPTIMIZATION(t3 PRIMARY, f2_idx) */ f1
  FROM t3 WHERE f1 > 30 AND f1 < 33;
SELECT /*+ BKA(t1) NO_BKA(t2) */ * FROM t1 INNER JOIN t2 WHERE ...;
SELECT /*+ NO_ICP(t1, t2) */ * FROM t1 INNER JOIN t2 WHERE ...;
SELECT /*+ SEMIJOIN(FIRSTMATCH, LOOSESCAN) */ * FROM t1 ...;
EXPLAIN SELECT /*+ NO_ICP(t1) */ * FROM t1 WHERE ...;
SELECT /*+ MERGE(dt) */ * FROM (SELECT * FROM t1) AS dt;
INSERT /*+ SET_VAR(foreign_key_checks=OFF) */ INTO t2 VALUES(2);

是否有 Yii2 本地设置这些 query hints 的方式?

【问题讨论】:

  • 我认为他们在那里是最后的选择。提前获取索引并让优化器做出正确的决策是我的偏好。

标签: mysql yii2 query-hints


【解决方案1】:

您可以使用select() 的第二个参数来传递选择选项:

$query = (new Query())
    ->select('f1', '/*+ NO_RANGE_OPTIMIZATION(t3 PRIMARY, f2_idx) */')
    ->from('t3'); 

【讨论】:

    猜你喜欢
    • 2013-02-14
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多