0

このサブクエリを見栄えの良いコードにする方法は? そして、SQL の最適化とコード スタイルに関するガイドを探しています。

 SELECT foo FROM table WHERE foo_id IN 
    (
    SELECT idchild FROM table2 WHERE idparent IN 
    (SELECT idchild FROM table2 WHERE idparent IN 
    (SELECT idchild FROM table2 WHERE idparent = @id)
    ))
 AND txt_type ='some_cat'
4

3 に答える 3

2

パフォーマンスと読みやすさを向上させるには、次のようにします。

select t4.foo
from table2 t1
join table2 t2 on t2.idparent = t1.idchild
join table2 t3 on t3.idparent = t2.idchild
join table t4 on t4.foo_id = t3.idchild and t4.txt_type ='some_cat'
where t1.idparent = @id

から選択された最初のテーブルのwhere句にインデックス付きの述語があることに注意してください。このクエリは、クエリ全体でインデックス付きアクセスを使用し、非常に効率的です。

また、txt_typeの述語をon句に移動した方法にも注目してください。この句では、結合がアセンブルされた後ではなく、行が読み取られたときに適用できます。

于 2012-06-22T10:44:25.923 に答える
2

試す :

   Select a.foo,b.idchild from Table as a inner join table2 as b
   on a.foo_id=b.idchild and b.idparent=@id  AND a.txt_type ='some_cat'
于 2012-06-22T10:42:51.000 に答える
1

Praveenのソリューションを使用するか、次のソリューションを使用してください。どちらも適切に最適化されています。

SELECT foo 
FROM   table1 
WHERE  EXISTS (SELECT 1 
               FROM   table2 
               WHERE  idparent = @id 
                      AND table2.idchild = table1.foo_id) 
       AND txt_type = 'some_cat' 
于 2012-06-22T10:48:29.150 に答える