有一个查询运行得比我想要的慢,但是我无法共享详细信息。该查询已经返回了正确的结果,并且已经对其进行了重构,但是我无法使其足够快地运行。谓词在可能的情况下已经是可Sarg-able的。它已经正确地使用了联接,不要求任何额外的表,并且没有不必要的复制行或使用嵌套子查询的方式,这会降低它的速度。
我不是DBA,而且我已经不知道如何选择一个好的索引来加快查询速度。我可以更改表结构;没有DBA负责数据库,我拥有数据库服务器的权限。
我应该采取哪些步骤来优化SQL查询?
简介: 这里有很多要讨论的内容,由于SQL的复杂性,任何人都不可能完全帮助您进行查询- 这与查询的内容,表的大小以及表的大小有关。正在使用的数据库系统是。如果您不知道什么是索引或如何使用索引
注意事项: 同样,如果您的系统具有DBA,请在索引任何内容之前与他们联系,尤其是在实时系统上。如果您对他们友善,他们甚至可以提供帮助。如果该系统被其他许多人使用,则在更改诸如索引之类的内容之前要小心。如果数据用于多种查询类型,请确保没有在它们上产生大量冲突或重叠的索引。
句法。 标准(SQL92)使用:CREATE INDEX [index name] ON [table name] ( [column name] )。该语法在几乎所有系统上都应适用。如果表上只需要一个索引,并且还没有聚集索引,则可以使用:CREATE [Unique] Clustered INDEX [index name] ON [table name] ( [column name] )-如果不能有多个具有相同值的项目,则该索引应该是唯一的。如果您无法使用它
CREATE INDEX [index name] ON [table name] ( [column name] )
CREATE [Unique] Clustered INDEX [index name] ON [table name] ( [column name] )
应该为哪些表建立索引? 用于查询的任何表(尤其是数据是静态的或仅获取新值的表)都是不错的选择。如果该表在您的查询中,并且具有join语句,则您可能希望在要连接的列上有一个索引。
应该为哪些列编制索引? 有很多关于选择最佳索引以及如何正确索引数据库的书籍。如果您不想深入研究索引,建立索引的基本经验法则是:按以下顺序进行索引:
on Table1.columnA=Table2.ColumnA and Table1.columnB=Table2.ColumnQ
where Table1.columnN=鈥橞ob鈥� and Table1.columnS<20
还:
Alter table Table1 alter column columnN int not null
完成所有这些操作,您就可以顺利进行。 但是,如果您定期需要这些东西,请学习它! 买书,在线阅读,查找信息。那里有很多信息,这是一个很深的话题,但是如果您知道自己在做什么,则可以使查询更好。