我有一个巨大的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值上更有效地选择?
答案 0 :(得分:1)
在X和SCORES上创建索引:
CREATE INDEX idx_x ON tableFOO(X);
CREATE INDEX idx_score ON tableFOO(SCORE);
(感谢Jon Skeet的评论)
答案 1 :(得分:0)
单独的指数是不够的;你需要一个“复合”指数:
INDEX(X, Score)
。 (我假设在WHERE X = x
中,x
是常量。)
检查EXPLAIN中的Key_len
以了解我的意思。