假设我在 SQL 2005 数据库中有一个表,其中包含 2,000,000 多条记录和一些索引。在我的查询中使用索引提示有什么好处?在查询中使用索引提示是否有缺点?
4 回答
首先,尝试使用 SQL Profiler 在您的数据库中生成一个活动的 .trc 文件,以便在几个小时内完成正常工作负载。然后使用 SQL Server Management Studio Tools 菜单上的“Database Engine Tuning Advisor”来查看它是否建议了任何可能有益的附加索引、复合索引或覆盖索引。
我从不使用查询提示,主要使用数百万行数据库。它们有时会对性能产生负面影响。
我相信这里的每个人都指出的关键点是,经过非常仔细的考虑,索引提示的使用可以提高查询的性能,如果且仅当存在多个可用于检索数据的索引时,如果 SQL服务器没有使用正确的。
根据我的经验,我发现需要索引提示并不是很常见,我相信我今天可能有 2-3 个查询正在使用它们……正确的索引创建和数据库优化应该能让你大部分到执行数据库的方式。
索引提示只会在您的查询涉及连接表的情况下发挥作用,并且用于连接到另一个表的列与多个索引匹配。在这种情况下,数据库引擎可能会选择使用一个索引来进行连接,并且从调查中您可能会知道,如果它使用另一个索引,则查询将执行得更好。在这种情况下,您提供索引提示,告诉数据库引擎使用哪个索引。
我的经验是,有时您比 SQL Server 更了解您的数据集。在这种情况下,您应该使用查询提示。换句话说:您帮助优化器做出决定。
我曾经构建了一个数据仓库,其中 SQL Server 没有在复杂查询中使用最佳索引。通过在我的查询中给出索引提示,我设法使查询速度提高了大约 100 倍。
仅在分析查询计划后使用它们。如果您认为在使用另一个索引或以不同的顺序使用它们时您的查询可以运行得更快,请给服务器一个提示。