次のビューを検討してください
CREATE VIEW `my_view` AS
SELECT
a.id,
(SELECT
COUNT( b.id )
FROM
another_table b
WHERE
b.a_id = a.id AND b.other_column = 'ABC'
) AS counter
FROM
some_table a
some_table何百万もの行があり、 +another_tableにインデックスがあります。 a_idother_column
ここで、次の SQL を考えてみましょう。
SELECT vw.*
FROM some_table a
LEFT JOIN my_view vw on vw.id = a.id
WHERE a.id = 12345
この sql クエリが でフル テーブル スキャンを実行している理由を誰か教えてもらえますsome_tableか? another_table目標は、other_columnequalsから行数を返すビューを持つことです'ABC'。
LEFT JOIN my_viewクエリをに置き換えるとLEFT JOIN ( the AS CLAUSE from the view )、完全なテーブル スキャンは実行されず、a_id + other_column インデックスが使用されます。
私は困惑しています。どんな助けでも大歓迎です。