有什么方法可以为这个查询创建一个有效的索引并摆脱“文件排序”?
SELECT id, title FROM recipes use index (topcat) where
(topcat='$cid' or topcat2='$cid' or topcat3='$cid')
and approved='1' ORDER BY id DESC limit 0,10;
我创建了索引“topcat”(列:topcat1+topcat2+topcat3+approved+id)但仍然是“使用位置;使用文件排序”。
我可以再创建一列,比如说“all_topcats”来将 topcat 数字存储在一个数组中 - 1、5、7,然后运行查询“... where $cid iIN ()...”。但问题是,在这种情况下,“all_topcats”列将是“varchar”,但“approved”和“id”列-int,无论如何都不会使用索引。
有任何想法吗?谢谢。