【发布时间】:2017-10-09 23:10:05
【问题描述】:
我有以下疑问:
SELECT
b.business_name,
b.address,
b.city,
b.state,
b.phone_number,
i.date
FROM business_table b
LEFT JOIN inspection_table i ON b.id = i.business_id
WHERE i.date = (
SELECT MAX(i.date)
FROM inspection_table i
WHERE b.id = i.business_id
)
AND b.city LIKE '%Boston%'
OR b.city LIKE '%Dallas%'
OR b.city LIKE '%Seattle%'
OR b.city LIKE '%New York%'
OR b.city LIKE '%Portland%'
OR b.city LIKE '%San Antonio%'
OR b.city LIKE '%Los Angeles%'
OR b.city LIKE '%Miami%'
ORDER BY i.date DESC;
我得到了我想要的结果,但查询速度很慢(~17 秒)。有没有更好的方法来构造这个查询? city 字段在 business_table 中建立索引。
【问题讨论】:
-
您可以使用
REGEXP(b.city REGEXP 'Boston|Dallas|Seattle'),但这实际上可能会稍微慢一些。不过,它不应该花费 17 秒。你的表有多少行? -
~32,000 行在我的表中
-
您是否尝试在 OR 列表周围加上括号?还是您想要“来自波士顿的最新......以及来自其他城市的一切”?
标签: mysql full-text-search query-optimization