【问题标题】:Optimization of WHERE using a single value on multiple columns在多列上使用单个值优化 WHERE
【发布时间】:2018-06-01 01:16:09
【问题描述】:

我有一个 MySQL 表,我正在尝试在一对列中搜索单个值。这是一张相当大的桌子,所以我希望搜索时间尽可能快。

为了便于理解,我对下表进行了简化

SELECT * FROM clients WHERE name=? OR sirname=?

VS

SELECT * FROM clients WHERE ? IN (name, sirname)

在名字和sirname上有索引

EXPLAIN 前者使用索引,但不使用后者

这是准确的,还是在引擎盖下进行了一些 EXPLAIN 没有发现的优化?

Checking multiple columns for one value 密切相关,但由于线程年龄无法在此讨论。

【问题讨论】:

    标签: mysql optimization


    【解决方案1】:

    因为 MySQL 通常在查询中对每个表引用使用一个索引,所以您可能不得不这样做:

    SELECT * FROM clients WHERE name=?
    UNION
    SELECT * FROM clients WHERE sirname=?
    

    出于索引选择的目的,这将算作两个表引用。每种情况都会使用适当的索引。

    【讨论】:

    • 第一个查询使用索引,MySQL 处理多个索引就好了。
    • @KillerR - 检查EXPLAIN; “索引合并”是一个kludge,用于解决缺少任何有用索引的问题。 Bill 的解决方案可以更有效地使用两个单独的索引。
    猜你喜欢
    • 1970-01-01
    • 2012-02-25
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多