【发布时间】:2016-11-17 06:52:40
【问题描述】:
我有一个有 200K 行的表。当我执行查询时,它花费了太多时间;大约 2 分钟。
这是我的查询:
SELECT a,b,c,d,@row:="tag1" as tag
FROM tableName
WHERE tagName like "%helloworld|%"
ORDER BY viewCount desc
LIMIT 20;
helloworld| 仅出现在 2 行中。
我想更改查询,所以如果数据出现超过 20 次,它应该返回 20 行,否则无论出现什么行。
如何优化这个查询?
【问题讨论】:
-
运行全表扫描。尝试全文搜索
-
您需要创建带有标签的单独表才能在没有全扫描的情况下进行过滤。
-
在
tagName列上尝试全文索引以及MATCH AGAINST,即:WHERE MATCH(tagName) AGAINST('helloworld|' IN BOOLEAN MODE) -
阅读本文——可搜索查询是可以利用索引的查询。你的不能。 stackoverflow.com/questions/799584/…
-
除非您的行非常宽或者您使用的计算机速度非常慢,否则扫描 200,000 行应该需要几秒钟,而不是几分钟。
标签: mysql sql database mariasql