在 SQL 中的表或视图上添加索引

Posted

技术标签:

【中文标题】在 SQL 中的表或视图上添加索引【英文标题】:Adding an Index over a table or over a view in SQL 【发布时间】:2020-08-22 07:42:31 【问题描述】:

我有一张包含大约 50 万条记录的表格,每天都会更新/插入。 我需要添加一些索引以使我的查询更快。是否建议将它们添加到表本身或该表的视图上? 获取数据并将其显示在网站上时,我的所有查询都在视图上。

【问题讨论】:

您使用的是哪种 DBMS 产品? “SQL”只是一种查询语言,而不是特定数据库产品的名称,调优建议是高度特定于供应商的(并非每个 DBMS 都允许您在视图上创建索引)。请为您正在使用的数据库产品添加tag。 Why should I tag my DBMS 【参考方案1】:

即使您正在创建索引视图,性能也会因基表上的常规插入/更新操作而受到影响,因为索引也需要更新,因此需要衡量创建后看到多少性能增益是一种权衡索引视图以及对基表的插入/更新操作会降低多少性能。

我在下面引用SQL Server官方文档

“当对被大量索引视图或较少但非常复杂的索引视图引用的表执行 DML 时,这些引用的索引视图也必须更新。因此,DML查询性能可能会显着下降,或者在某些情况下,甚至无法生成查询计划。在这种情况下,请在生产使用之前测试 DML 查询,分析查询计划并调整/简化 DML 语句。” em>

【讨论】:

以上是关于在 SQL 中的表或视图上添加索引的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server和Oracle数据库索引介绍

java.sql.SQLSyntaxErrorException:ORA-00942:netbeans 8.0.1 中的表或视图不存在错误消息

ORA-00942: 写入数据库中的表时表或视图不存在错误

请问数据库中的视图和触发器是实现啥功能的?

数据库创建索引的利弊

SQL Server:使用来自另一个表或视图的参数连接一个表中的平均数据