【发布时间】:2016-10-26 12:52:48
【问题描述】:
我有一个包含大约 300 万行的表,其中包含城市、城市所在的国家和一些其他数据。
我想检索例如有限的行,其中城市名称以某个字符串开头,但首先列出位于特定国家/地区的那些。
我尝试按 country "us" 对它们进行排序,这非常慢,因为服务器必须在应用限制之前对所有找到的行进行排序。
现在我想出了以下说法:
(SELECT * FROM cities WHERE city LIKE "ab%" AND country = "at" LIMIT 5)
UNION
(SELECT * FROM cities WHERE city LIKE "ab%" LIMIT 5)
LIMIT 5
任何前缀长度都非常快,但看起来有点脏。
有没有更有效的方法来做到这一点?
【问题讨论】:
-
我认为这已经很好了。
-
我不遵循查询的逻辑。另外,当您已经只有 10 条记录时,为什么还要将
LIMIT 5应用到外部? -
@TimBiegeleisen 因为他只希望最终结果中有 5 行。如果
at的行数少于 5 行,他想从其他国家填补剩余的空位。 -
很好的分析,我不会想到这一点。
-
@TimBiegeleisen 正如 Barmar 所说,因为结果我只想要 5 行。在我得到最多有 10 行的结果后,我可以手动执行此操作,但我认为服务器会更快地执行此操作,并且我会节省一点带宽。然而这并不重要。
标签: mysql sql select sql-order-by