MySQL WHERE 中的多个 OR

标签 mysql full-text-search query-optimization

我有以下查询:

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/

相关文章:

php - Wordpress 使用 MySQL 全文搜索?

mysql - 处理 MySQL 日期以提高成千上万用户性能的最佳方法

PostgreSQL。日志文件中的慢查询在 psql 中很快

mysql - 通过编程从C#程序附带的数据库中备份数据库

php - 从数据库中获取结果

php - 如何在进行mysql查询之前识别停用词

MySQL:查询在不同环境中执行不同

mysql - 如何使用逗号分割列的值并在MySQL中显示在行中

mysql - 如何使用 sequelize (nodejs) 创建 mysql 数据库

c# - key.contains(x) Map/Dictionary 的适当数据结构