1

重複の可能性:
結合とサブクエリ

大量のデータセットを扱う必要がありますが、条件に基づいてレコードを除外する必要がある場合があります。

チェックされるデータの量、および返されるデータの量は一度に数万であり、これは頻繁に実行されるため、どのアプローチが最適かについて誰かが光を当てることができるかどうか疑問に思っていました速度と負荷の観点から、可能な限りスムーズに物事を進めてください

SELECT a.* 
FROM table_a as a
LEFT JOIN table_b 
  ON table_b.a_id = a.id
WHERE table_b.status <> 'new'

また

SELECT * 
FROM table_a
WHERE id NOT IN (
  SELECT a_id 
  FROM table_b
  WHERE status <> 'new'
) 
4

3 に答える 3

1
SELECT * 
FROM table_a
WHERE NOT EXISTS (
  SELECT * 
  FROM table_b b 
  WHERE b.a_id = a.id AND b.status <> 'new'
) 

This query or JOINs will be better queries rather than using INs in query. Use IN keyword for static data not for sub queries. NOT EXISTS is far better than IN in query.

于 2012-11-20T07:02:12.747 に答える
1

ほとんどの場合、JOIN はサブクエリよりも高速であり、サブクエリが高速であることは非常にまれです。

JOIN では、RDBMS はクエリに適した実行計画を作成し、処理のためにどのデータをロードする必要があるかを予測して時​​間を節約できます。これは、すべてのクエリを実行し、すべてのデータをロードして処理を行うサブクエリとは異なります。 .

サブクエリの良いところは、JOIN よりも読みやすいことです。これが、ほとんどの SQL 初心者がサブクエリを好む理由です。それは簡単な方法です。しかし、パフォーマンスに関しては、ほとんどの場合、JOINS の方が読みにくいわけではありませんが、より優れています。

ここから

于 2012-11-20T06:45:16.670 に答える
0

クエリ:

SELECT a.* 
FROM table_a as a
LEFT JOIN table_b 
  ON table_b.a_id = a.id
WHERE b.status <> 'new'

サブクエリではなく結合を使用するため、他の方法よりも優れています。

また、列table_b.a_id and table_a.idにもインデックスが作成されていることを確認する必要があります。

于 2012-11-20T06:41:05.570 に答える