gpt4 book ai didi

database - mysql:优化查询w/mixed-ascendency ORDER BY

转载 作者:搜寻专家 更新时间:2023-10-30 20:32:31 26 4
gpt4 key购买 nike

我有一个大表(现在约 100 万行,很快约 1000 万行)有两个排名列(除了常规数据):

  • avg_visited,一个 0-1 的 float ,代表百分比年龄;越高越好
  • alexa_rank,一个 1-N 的整数,给出先验排名

先验排名来自外部来源,因此无法更改。许多行还没有流行(因为还没有用户点击它),所以先验排名是后备排序。然而,流行度确实会非常频繁地变化 - 既可以更新旧条目,也可以为以前只有先验排名的条目增加流行度,如果某些用户确实点击了它的话。

我经常运行 SELECT id, url, alexa_rank, avg_visited FROMsitesORDER BY avg_visited desc, alexa_rank asc LIMIT 49500, 500(对于 49500 的各种值)。

但是,根据 http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html,ORDER BY 不能使用具有混合优势的索引

这是在 mysql 5.1 中,innodb。

我怎样才能最好地改变这种情况,以便为我提供一个理智的、完全索引的查询?

最佳答案

不幸的是,MySQL 不支持索引中的 DESC 子句,也不支持派生表达式的索引。

您可以将负面流行度与正面流行度一起存储,并在 ORDER BY 中使用它:

CREATE INDEX ix_mytable_negpopularity_apriori ON (neg_popularity, a_priori);

INSERT
INTO mytable (popularity, neg_popularity)
VALUES (@popularity, -@popularity);

SELECT *
FROM mytable
ORDER BY
neg_popularity, a_priori

关于database - mysql:优化查询w/mixed-ascendency ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2380881/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com