假设我有一个不太“好”的 SQL 查询。
SQL Query 有很多长条件的内连接,最后是一个简单的“where”语句。
现在假设我创建了一个与该 SQL 查询相对应的视图,但最后的“where”语句除外。因此,我没有进行那个长查询,而是使用视图并简单地添加“where”语句。
我的问题如下:哪一个性能最好?
我不确定“查看”选项是否对应于两个 sql 语句,而不是第一个选项的一个 sql 语句。或者在执行查询之前,“查看”查询被“粘贴”在更简单的查询中并且是“相同的”。
没有不同。视图使用与单独查询相同的查询。
不同的是,它需要将其存储在视图表视图中,而不是,它们只是从外部看起来很容易的查询。
假设您使用的 DBMS 具有基于成本的查询优化器,那么当查询的一部分转换为视图时,您可能不会获得任何更好的性能。您可以通过比较两个查询版本的估计成本,使用数据库的查询解释工具来确认这一点。
我建议使用查询解释实用程序来确定查询变得昂贵的确切位置,因为查询痛点的位置通常是意想不到的。看起来所有这些连接都在减慢速度,但它们可能正在利用索引来最小化连接行所需的 I/O 和 CPU 周期。很多时候,由于在 WHERE 或 ON 子句中引用了未索引的列,查询会陷入困境。