包含 SQL 索引提示如何影响查询性能?
假设我在 SQL 2005 数据库中有一个表,其中包含 2,000,000 多条记录和一些索引。 在查询中使用索引提示有什么好处? 在查询中使用索引提示是否有缺点?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
假设我在 SQL 2005 数据库中有一个表,其中包含 2,000,000 多条记录和一些索引。 在查询中使用索引提示有什么好处? 在查询中使用索引提示是否有缺点?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
我相信这里每个人都指出的关键点是,经过非常仔细的考虑,索引提示的使用可以提高查询的性能,当且仅当存在多个可用于检索数据的索引,并且如果 SQL服务器未使用正确的服务器。
根据我的经验,我发现需要索引提示并不常见,我相信我今天使用的查询可能有 2-3 个使用了它们......正确的索引创建和数据库优化应该让您受益匪浅执行数据库的方式。
The key point that I believe everyone here is pointing to is that with VERY careful consideration the usage of index hints can improve the performance of your queries, IF AND ONLY IF, multiple indexes exist that could be used to retreive the data, AND if SQL Server is not using the correct one.
In my experience I have found that it is NOT very common to need Index hints, I believe I maybe have 2-3 queries that are in use today that have used them.... Proper index creation and database optimization should get you most of the way there to the performing database.
索引提示仅在您的查询涉及连接表以及用于连接到另一表的列与多个索引匹配的情况下才会发挥作用。 在这种情况下,数据库引擎可能会选择使用一个索引来进行连接,并且通过调查您可能知道,如果它使用另一个索引,查询将执行得更好。 在这种情况下,您可以提供索引提示,告诉数据库引擎要使用哪个索引。
The index hint will only come into play where your query involves joining tables, and where the columns being used to join to the other table matches more than one index. In that case the database engine may choose to use one index to make the join, and from investigation you may know that if it uses another index the query will perform better. In that case you provide the index hint telling the database engine which index to use.
我的经验是,有时您对数据集的了解比 SQL Server 还要多。 在这种情况下,您应该使用查询提示。 换句话说:您帮助优化器做出决定。
我曾经构建了一个数据仓库,其中 SQL Server 没有在复杂查询上使用最佳索引。 通过在查询中提供索引提示,我设法使查询速度提高了约 100 倍。
仅在分析查询计划后才使用它们。 如果您认为使用另一个索引或以不同的顺序使用它们时查询可以运行得更快,请给服务器一个提示。
My experience is that sometimes you know more about your dataset than SQL Server does. In that case you should use query hints. In other words: You help the optimizer decide.
I once build a datawarehouse where SQL Server did not use the optimal index on a complex query. By giving an index hint in my query I managed to make a query go about 100 times faster.
Use them only after you analysed the query plan. If you think your query can run faster when using another index or by using them in a different order, give the server a hint.
首先,尝试使用 SQL Profiler 在数据库中生成几个小时内正常工作负载活动的 .trc 文件。 然后使用 SQL Server Management Studio 工具菜单上的“数据库引擎优化顾问”,查看它是否建议任何可能有益的附加索引、复合索引或覆盖索引。
我从不使用查询提示,主要使用数百万行的数据库。 它们有时会对性能产生负面影响。
First, try using SQL Profiler to generate a .trc file of activity in your database for a normal workload over a few hours. And then use the "Database Engine Tuning Advisor" on the SQL Server Management Studio Tools menu to see if it suggests any additional indexes, composite indexes, or covering indexes that may be beneficial.
I never use query hints and mostly work with multi-million row databases. They sometimes can affect performance negatively.