我有 1 亿行的表。我必须使用 BETWEEN 运算符并且查询非常慢。必须获取数量和价格范围内的所有行,或者所有与该城市和州有关的行。
我有 2 个索引,一个在 t.name 上,另一个在 t.city 和 t.state 上。
此查询的性能很慢。如何改进此查询。
SELECT t.trader_id, t.name, t.city, t.state
FROM trader t
WHERE t.name = 'john test' AND
is_valid = 1 AND
((t.amount BETWEEN (-2500.0000 , 2800.000) AND
t.price between (25.00000 , 58.000000)) OR
(t.city='city' AND
t.state='state'))
上存在非唯一索引
- t.name
- t.city, t.州
对于 (name 和 is_valid),大约有 78000 行。对于(价格和金额),大约有 331809 行。对于(城市和州),大约有 13500 行。