如何使这个SQL查询更快

时间:2013-12-20 09:19:16

标签: mysql sql

我有两张表,比如

表1:

word id
a    1
a    2
a    10
c    20
d    21
e    30

表2:

id1 id2
1 20
2 21

现在,如果word = 'a',那么我需要使用table1和table2找出'c''d': 我写了一个查询,它工作但是花了太多时间,因为表包含大量数据。

查询:

SELECT word 
FROM table1 
WHERE id IN 
        (SELECT id2 FROM table2 
         WHERE id1 IN 
                  ( SELECT id FROM table1 WHERE word = 'a'))

另一个问题:

SELECT DISTINCT word FROM table1 WHERE id IN (SELECT id FROM table1 WHERE word = 'a')

4 个答案:

答案 0 :(得分:2)

SELECT T1.WORD
FROM TABLE1 T1 
    INNER JOIN TABLE2 T2 ON T1.ID = T2.ID2
    INNER JOIN TABLE1 T3 ON T2.ID1 = T3.ID
WHERE T3.WORD = 'a'

您应该尽量避免使用嵌套的SELECT并尽可能多地使用JOIN。这是因为存在一个在查询中执行语句的顺序。

JOIN始终在WHERE语句之前执行,并且通过这样做,您可以提前过滤一步。

如果JOIN无法解决您的所有问题,那么您可以在WHERE条款中加入条件。

答案 1 :(得分:1)

尝试这样的事情,但是。检查您的身份证上是否有索引

select word 
from  table1 where id in (
select table2.id2 
from Table1 inner join Table2 on id1 = Table1.id and Table1.word = 'a')

答案 2 :(得分:1)

试试这个

SELECT word 
FROM table1 WHERE id IN(
                         SELECT table2.id2 
                         FROM Table1 INNER JOIN Table2 ON id1 = Table1.id AND Table1.word = 'a'
                       )

答案 3 :(得分:1)

这也是...

SELECT  t.word
FROM    table1 t
        INNER JOIN Table2 ON t.id = id2
        INNER JOIN table1 tt ON id1 = tt.id
WHERE tt.word = 'a'