我有以下查询:
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;
我得到了我想要的结果,但是查询非常慢(~17s)。有没有更好的方法来构造这个查询? city 字段在business_table 中建立索引。
最佳答案
传统索引根本无法帮助LIKE '%pattern'
查询。未使用索引,您的查询必须对表进行完整的表扫描。
您需要使用Full-Text Search Functions如果你希望它使用 MySQL 进行高效搜索。
您可能会喜欢我的演示Full Text Search Throwdown ,其中我比较了 MySQL 文本搜索的不同方法。
关于MySQL WHERE 中的多个 OR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46656309/