次のビューを検討してください
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_id
other_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_column
equalsから行数を返すビューを持つことです'ABC'
。
LEFT JOIN my_view
クエリをに置き換えるとLEFT JOIN ( the AS CLAUSE from the view )
、完全なテーブル スキャンは実行されず、a_id + other_column インデックスが使用されます。
私は困惑しています。どんな助けでも大歓迎です。