此查询针对MyISAM表:
SELECT * FROM table
WHERE link_id = 1 and counted = 1
现在,如果我没有通过计数,它会非常快。当我通过计数时,它只需要永远。这是一张很大的桌子,但是我没有看到为什么它会被卡住而不是只是向我展示一张空桌子的原因。
有什么想法吗?
答案 0 :(得分:1)
运行此命令以查看您的表是否具有正确的索引。也许算上没有指数?
EXPLAIN SELECT * FROM table WHERE link_id = 1 and counted = 1
答案 1 :(得分:1)
(link_id,count)上的索引将使该查询更快。
答案 2 :(得分:0)
这是因为它必须通过每一行过滤counted=1
。您是否在link_id
上设置了索引?如果是这样,您可以为counted
答案 3 :(得分:0)
我的猜测是你只是缺少一个索引。试试这个:
SHOW INDEXES FROM <your table name>
您是否在counted
字段中看到了column_name
?
如果没有,那么你可能想:
CREATE INDEX <nifty index name> ON <your table name> (counted);
我接下来会看EXPLAIN
(Micah解释here)。 (我只建议解释第二,因为我的经验是,如果查询很慢,大多数情况下问题只是一个缺失的索引。)