MySQL-索引中跳过列



我们有一个(大)表,上面有一个多列索引。现在,我们想以以下格式进行查询: SELECT * FROM table WHERE (B=... AND C=...) OR (B=... AND C=...) OR ...因为表中有很多行,并且不使用索引,所以查询的性能非常糟糕。

带有B列,C的索引是理想的,不幸的是它不可用,我们也无法更改(其他供应商)。A列具有我们不感兴趣的值。

让MySQL使用可用索引,我们在其中添加了一个额外的条件:SELECT * FROM table WHERE (A IN (1, 2, 3, 4, 5, ..., 99, 100)) ((B=... AND C=...) OR (B=... AND C=...))OR ...。结果是现在正确使用了索引,并且查询性能已经好多了。但是,在查询中提供所有可能的A的所有可能值看起来有些丑陋。我的感觉是,应该有一种更简单的方法来执行同样的事情,甚至可以做得更好。

即使查询中未使用A列A列,即使A列不使用A列,是否有一种方法可以强迫MySQL使用索引?还是我们已经找到了最好的解决方案?

是的,可能有效!

mySQL索引提示

基本上说FROM table USE INDEX (index_name)FROM table FORCE INDEX (index_name)

但这无济于事,因为基本上,如果您强制索引,那就回到进行全表扫描。

尝试

FROM table
WHERE A IN (SELECT DISTINCT A FROM table) 
AND ....

可能是干净的

最新更新