0

有没有办法优化这样的查询:

SELECT * FROM tbl WHERE tid=8 ORDER BY col_a*col_b DESC LIMIT 10;

col_a 和 col_b 是 INT 类型

我当然知道我可以创建 col_c 来保存该数据,但希望 MySQL 有某种方法可以将这些数据直接保存在索引中。

此查询当前大约需要 10 秒(取决于有多少行与相关键匹配)。这是一个示例 EXPLAIN 输出:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  tbl ref tid_uid, tid_col_a  tid_uid 4   const   396816  Using where; Using filesort
4

1 回答 1

0

当 ORDER BY 子句包含表达式或函数时,您询问是否有任何方法可以优化排序。

不,没有任何基于索引的方法。MySQL 根本没有函数索引。

因此,您将不得不根据对数据含义的理解进行某种应用程序域优化。

例如,如果 col_a 和 col_b 值都是正数并且总是小于或等于某个特定值,则您可以在 WHERE 子句中使用某种边界假设来消除较小的值。但这可能是过早优化的情况。

于 2013-07-06T11:37:43.127 回答