Sql 查询优化-使用likes的多个连接条件
我遇到了一些情况,我的新手级别的SQL经验与之相匹配 我有一个问题Sql 查询优化-使用likes的多个连接条件,sql,Sql,我遇到了一些情况,我的新手级别的SQL经验与之相匹配 我有一个问题 SELECT a.One, a.Two, a.Three, a.Four, b.One, b.Two FROM table1 a INNER JOIN table2 b on b.Four = a.Nine and b.Six like a.One and b.Seven like b.Two 表1是25000行 表2是2200万行 like子
SELECT a.One,
a.Two,
a.Three,
a.Four,
b.One,
b.Two
FROM table1 a
INNER JOIN table2 b on b.Four = a.Nine
and b.Six like a.One
and b.Seven like b.Two
- 表1是25000行
- 表2是2200万行
- like子句的工作原理类似于这个“test%”,所以它应该利用我拥有的索引,我认为我不需要全文索引,因为它是尾随的,而不是前面的
- 我有一个存在的索引,当我使用一个直接的equals而不是like时,它非常有效
有没有更好的方法来编写此查询?问题是索引只能用于一个
,如“pattern%”
比较。这是一个不等式,因此索引的使用在第一个不等式处停止
如果将查询更改为联合,您可能会很幸运:
SELECT a.One, a.Two, a.Three, a.Four, b.One, b.Two
FROM table1 a INNER JOIN
table2 b
ON b.Four = a.Nine and b.Six like a.One
UNION
SELECT a.One, a.Two, a.Three, a.Four, b.One, b.Two
FROM table1 a INNER JOIN
table2 b
ON b.Four = a.Nine and bb.Seven like b.Two;
然后,在a(九,一)
和b(四,二)
上设置索引。尽管这两个子查询应该使用索引,但您可能会得到许多中间结果的匹配,从而减慢查询速度。您能否发布1)每个表的SHOW CREATE TABLE
输出(或RDBMS的等效输出),以及2)性能问题的EXPLAIN
输出(或等效执行计划),您应该始终包括您正在使用的数据库。您可能需要a(1,9)和/或b(2,4)的数据库一文不值,这取决于正在使用的RDBMS以及它如何维护和应用索引统计信息。