【问题标题】:Speed up: SELECT statement on DOUBLE加速:DOUBLE 上的 SELECT 语句
【发布时间】:2015-02-23 13:47:10
【问题描述】:

我有一个巨大的 MySQL 数据库表 (InnoDB),其中包含约 45,000,000 个条目。它包含包含三列 X、Y 和 SCORE 的相似性数据。 (意思是:X 与 Y 的相似度得分为 0.562。)

现在我想在 X 和 SCORE > 0.8 上进行选择。

SELECT * FROM tableFOO WHERE X = x AND SCORE > 0.8;

但是这种方法需要很长时间(约 20 秒)。

有没有办法更有效地选择 DOUBLE 值?

【问题讨论】:

  • 你有 SCORE 和 X 的索引吗?
  • 我在 X 上有一个索引。但在 SCORE 上没有。但我会换蚂蚁再试一次。

标签: mysql performance select optimization double


【解决方案1】:

在 X 和 SCORES 上创建索引:

CREATE INDEX idx_x ON tableFOO(X);
CREATE INDEX idx_score ON tableFOO(SCORE);

(感谢 Jon Skeet 的评论)

【讨论】:

    【解决方案2】:

    单独的索引是不够的;你需要一个“复合”索引: INDEX(X, Score)。 (我假设在WHERE X = x 中,x 是一些常数。)

    检查 EXPLAIN 中的 Key_len 以了解我的意思。

    【讨论】:

    • 感谢您的回答。我会检查一下。但到目前为止,单独的索引也有效。
    • 复合索引在适当的时候可以显着加快查询速度。
    猜你喜欢
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 2023-04-07
    • 2017-02-14
    相关资源
    最近更新 更多