使用“或”运算符提高包含许多条件的查询的性能

时间:2019-01-28 21:26:28

标签: mysql indexing database-design

我有一个包含三列(地区,州,城市)的表

CREATE TABLE ads (
    Region varchar(100),
    State varchar(100),
    City varchar(100),
    ....
);

我想执行以下查询

SELECT * FROM ads
WHERE region=? OR state=? OR city=?

我可以用来减少搜索时间的最佳索引是什么?

我尝试使用多列索引

CREATE INDEX index_name
ON ads (region, state, city);

但似乎不起作用

1 个答案:

答案 0 :(得分:0)

该索引将无济于事。如果WHERE使用ANDs而不是ORs,将会很有帮助。

计划A:FULLTEXT(region, state, city)WHERE MATCH(region, state, city) AGAINST('+?' IN BOOLEAN MODE)。但是,FULLTEXT有一些警告,因此尽管速度很快,但您可能会发现它并不完美。

方案B:将OR变成UNIONdiscussion

计划C:将三列合并为一个并使用WHERE location LIKE CONCAT('%', ?, '%')。这将无济于事,因为仍然需要完整的罐头。

计划D:更改用户界面和/或用户期望。