我有一张包含大约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
任何前缀长度都非常快,但它看起来有点脏。
有更有效的方法吗?
答案 0 :(得分:0)
select top 5 *
, case when country = 'ab' then 1
else 0 end as rnk
from cities
where lower(city) like 'ab%'
or country = 'ab'
order by rnk desc;