我有一个MySQL表,我试图在一对列中搜索单个值。这是一张相当大的桌子,所以我希望搜索时间尽可能快。
为了便于理解,我简化了下表
SELECT * FROM clients WHERE name=? OR sirname=?
VS
SELECT * FROM clients WHERE ? IN (name, sirname)
名称和sirname上的索引
解析前者使用索引,但不使用后者
这是准确的,还是在EXPLAIN无法捕获的引擎盖下进行了一些优化?
与Checking multiple columns for one value密切相关,但由于线索的年龄,无法在那里讨论。
答案 0 :(得分:0)
因为MySQL通常在查询中为每个表引用使用一个索引,所以您可能必须这样做:
SELECT * FROM clients WHERE name=?
UNION
SELECT * FROM clients WHERE sirname=?
为了索引选择,这将被视为两个表引用。在每种情况下都将使用适当的索引。