MySQL InnoDB 慢 - 按案例排序

MySQL InnoDB Slow - Order By Case When

我有一个 table,其字段标志的值为 0、1 或 2。我需要对标志值为 2 的结果排序,然后是其余结果。

目前我正在使用 SELECT * FROM table ORDER BY CASE WHEN flag = 2 THEN 1 ELSE 0,虽然这在 MyISAM 上运行良好(<0.1s),但在 InnoDB(我们正在转向的东西)上看起来非常慢(10k 行需要 9s)。

我试过 ORDER BY FIELD (flag, '2') DESC,结果相似。

flag 有一个索引,如果我做一个简单的 ORDER BY flag DESC,它的工作速度非常快,但这会优先考虑标志 1 而不是标志 0,这是我不想要的。

InnoDB 是否有任何有用的调整,或者是否有更有效的方式来排序这些结果?

你试过了吗?:

SELECT * FROM table ORDER BY (flag = 2) DESC

感谢您对排序问题的替代方法的想法。

但是,问题在于 my.ini 的 InnoDB 设置:

# 60-80 % of available RAM.
innodb_buffer_pool_size = 1024M
innodb_additional_mem_pool_size = 128M

# 25 % of buffer pool size.
innodb_log_file_size = 256M
innodb_log_buffer_size = 128M

似乎使用 InnoDB 需要一些配置 my.cnf;我用惯了要求很少的MyISAM

显然有大量的阅读工作要做,包括下面的链接,但希望这会帮助其他人像我一样开始:

MySQL Manual

One of Many Third Party Articles