如何优化包含表和sql视图左连接的MySQL查询

如何优化包含表和sql视图左连接的MySQL查询,mysql,query-optimization,sql-view,Mysql,Query Optimization,Sql View,我有一个疑问: SELECT a.id, b.discount FROM (a LEFT JOIN b ON b.id_a = a.id); 此查询的解释命令如下: id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE a index NULL PRIMARY 4 NULL 1489

我有一个疑问:

SELECT a.id, b.discount FROM (a LEFT JOIN b ON b.id_a = a.id);
此查询的解释命令如下:

id  select_type   table  type   possible_keys   key       key_len  ref    rows   Extra
1    SIMPLE        a      index  NULL            PRIMARY   4        NULL   1489   Using index
1    SIMPLE        b      ALL    NULL            NULL      NULL     NULL   819   
A是一个有1489行的表,B是一个SQL视图。现在我明白了,MySQL必须执行1489*819操作,这是一种太不优化的操作。如果B是一个表,我会为列id_a创建一个索引,但我不知道如何使用SQL视图


有人可以帮忙吗?

我会查看视图,并尝试转到原始表,这些表限定了您要查找的元素是否存在。并确保“b”视图的根表在该键上有索引。

您也可以尝试创建一个带有索引的临时表,而不是使用未索引的视图。对于一些冗长的报告查询,我们做到了这一点,并因此获得了一些令人印象深刻的速度改进(当然是YMMV)。

切换表和视图可能会有所帮助

例如:

SELECT a.id, b.discount FROM (b RIGHT JOIN a ON b.id_a = a.id);

视图实际上只是一个存储的查询。同样的优化技术应用于视图,就像您在主查询中直接使用视图的基础查询一样,工作得非常完美!非常感谢,我想知道我怎么会错过这一点,现在看来这很合乎逻辑。我刚刚在视图B中使用的表的键上添加了索引。