考虑以下视图
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
?目标是有一个视图,它返回equalsanother_table
所在的行数。 other_column
'ABC'
如果我LEFT JOIN my_view
在查询中替换为LEFT JOIN ( the AS CLAUSE from the view )
,它不会进行全表扫描并使用 a_id + other_column 索引。
我难住了。任何帮助表示赞赏。