如何优化此SQL查询(使用索引)?

前端之家收集整理的这篇文章主要介绍了如何优化此SQL查询(使用索引)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有一个查询运行速度比我想要的慢.查询已经是正确的,我已经重构了它,但我不能让它运行得足够快.在可能的情况下,谓词已经是 Sarg-able.它已经正确使用连接,不请求额外的表,并且不会不必要地复制行或使用嵌套子查询以减慢它的速度.

我不是DBA,我不知道如何选择一个好的索引来加快查询速度.我可以改变桌子结构;没有DBA负责数据库,我有权在数据库服务器上这样做.

如何优化SQL查询

解决方法

简介:这里有很多要讨论的内容,由于sql的复杂性,任何人都无法完全帮助您完成查询 – 您的查询是什么,表有多大以及数据库是什么正在使用的系统是.如果您不知道索引是什么或如何使用它们,请参见此处: How does database indexing work?.

注意事项:同样,如果您的系统有DBA,请在索引任何内容之前检查它们,尤其是在实时系统上.如果你对他们很好,他们甚至可以提供帮助.如果系统被许多其他人使用,在更改索引之类的任何内容之前要小心.如果数据用于多种查询类型,请确保您没有在它们上创建大量冲突或重叠的索引.

句法.标准(sql92)使用:CREATE INDEX [索引名称] ON [表名]([列名]).此语法几乎适用于任何系统.如果表上只需要一个索引,并且还没有聚簇索引,则可以使用:CREATE [Unique] Clustered INDEX [索引名称] ON [表名]([列名]) – 如果只有不能有多个具有相同值的项目.如果您无法使用此功能,请参阅此帖子了解更多详情:How do I index a database column.

应该将哪些表编入索引?任何用于查询的表,特别是如果数据是静态的或仅获取新值,都是一个很好的候选者.如果表在您的查询中,并且有一个join语句,您可能希望在要连接的列上有一个索引.

应该将哪些列编入索引?有关于选择最佳索引以及如何正确索引数据库的完整书籍.如果您不想深入研究问题,索引的基本经验法则是:索引按以下顺序排列:

>加入谓词(在Table1.columnA = Table2.ColumnA和Table1.columnB = Table2.ColumnQ)
>过滤列(其中Table1.columnN =’Bob’和Table1.columnS< 20)
>按订单/分组等等(如果可能,任何用于订单/分组的列都应在索引中.)

也:

>使用有意义的数据类型 – 如果它是整数或日期,则不作为varchar存储. (列宽很重要.如果可能,请使用最小的数据类型.)
>确保您的联接是相同的数据类型 – int到int,varchar到varchar,依此类推.
>如果可能,请在每个表中的每个连接谓词上使用唯一的非空索引.
>确保可能的任何列都是非null. (如果它们不能包含空值,则可以使用以下语法.

Alter table Table1 
    alter column columnN int not null

做完这一切,你就会顺利完成.但如果你经常需要这些东西,那就去学习吧!买书,在线阅读,找到信息.那里有很多信息,这是一个很深刻的话题,但如果你知道自己在做什么,你可以更好地进行查询.

猜你在找的MsSQL相关文章