)我的英语不够好。所以请容忍我)
我正在优化此查询:
Select Title from Groups Where GroupID = WWPMD.GroupID) as GroupName
FROM dbo.Detail AS WWPMD INNER JOIN
dbo.News AS WWPMN ON WWPMD.DetailID = WWPMN.NewsID
WHERE
WWPMD.IsDeleted = 0 AND WWPMD.IsEnabled= 1 AND WWPMD.GroupID IN (
Select ModuleID FROM Page_Content_Item WHERE ContentID='a6780e80-4ead4e62-9b22-1190bb88ed90')
在这种情况下,表在GUID主键上有聚集索引。在执行计划中,箭头有点粗,表“detail”的聚集索引查找成本是87%,键查找没有成本
然后,我更改了表“detail”的索引。我在datetime列上放置了聚集索引,在PK和FK上放置了3个非聚集索引。现在在执行计划中,表详细信息的索引查找成本为4%,键查找成本为80%,带有细箭头。
我想知道哪个执行计划更好,我可以做些什么来改进这个查询。
更新:
谢谢大家的指导。还有一个问题。我想知道80%的聚集索引查找成本更好,还是80%的非聚集索引查找和键查找总成本更好。哪个更好?
我建议使用以下查询:
INNER JOIN (SELECT DISTINCT ModuleID FROM Page_Content_Item WHERE ContentID='a6780e80-4ead4e62-9b22-1190bb88ed90')z OR WWPMD.GroupID= z.ModuleID
而不是:
AND WWPMD.GroupID IN (
Select ModuleID FROM Page_Content_Item WHERE ContentID='a6780e80-4ead4e62-9b22-1190bb88ed90')
也必须是这个查询的调查执行计划,看来Detail. DetailId
上的Index带有过滤器(IsDeled=0和IsEnable=1
)非常有用。
当guid不连续时,guid列上的聚集索引不是一个好主意,因为这会导致插入时的性能损失。表中的记录是基于聚集索引进行物理排序的。聚集索引应放在具有连续值且不经常更改的列上。
如果在groupid(表组)上有一个非聚集索引,那么可以将“title”作为该索引的包含列。有关包含的列,请参见msdn。
IN 语句适用于选择 littele 位数据,如果要选择更多数据,则应使用 INNER JOIN 它的性能优于 IN 处理大数据
IN 比 JOIN ON DISTINCT 更快
EXISTS比IN更有效,因为“EXISTS只返回一行”
我一直在处理一个旧的项目,其中启用了Spring调度程序(@Sched我市正在积极使用),也激活了一些本地JDK线程池实例。在下面的项目配置xml中,我看到了; 一些quartz实现产生于它自己的作业定义,触发器定义,其中作业定义了它们自己的线程池执行器,如下所示, 然后开始将任务(Runnable)提交到池中。 但是我看到的是,在某个时候,为这些任务抛出了Spring任务拒绝异常。这是无稽之谈(
问题内容: 为了观看对象作用域变量,将其设置为true还是更好? 对于一个对象变量(如15点的属性,一些嵌套2级深)与输入元件和更新在视图中,有多差与设定为?这是要避免的大事吗? 是一个更好的解决方案? 我正在寻找轻松的方式来提高AngularJS应用程序的性能(我仍然停留在v1.2.2上)。 问题答案: 该功能是上述两种配置之间的中间地带。它比普通的$ watch()函数更深入;但是,它几乎不像
我在java中遇到了ScheduledExecutorService的问题(几天前我没有遇到这个问题,这让我觉得很奇怪)。请找到下面的代码和控制台输出。重复执行任务之间的延迟是1毫秒,所以理想情况下我应该达到每秒1000的计数(几毫秒),但这只是没有发生。请帮帮忙.. 代码: 控制台输出 1000-2013年3月13日14:43:54.477 200-2013年3月13日14:44:10.296
问题内容: 是否可以在postgresql中手动更改执行计划的操作顺序?例如,如果我一直想在过滤之前进行排序操作(尽管在正常使用Postgresql中没有意义),是否可以通过例如更改操作的内部成本来手动执行该操作? 如果实现自己的功能该怎么办?是否有可能总是在sql语句的最后执行这样的功能? 问题答案: 还有更多的方法- 这里显示了一些方法,但是还有第二种方法,如果要在处理结束时移动函数调用,则只
问题内容: 我想检索并进一步进行一些插入,删除和更新。 如果我想找寻谁住的最好的方法是什么? 制作2个外键并在表中: 或者只是一个外键表和其他外国键表 或像第一个选项一样制作 视图 ? 对于插入,删除和更新数据,它们仍然是最好的表吗?性能没有区别吗?我也很困惑,什么会影响架构的性能? 问题答案: 根据具体情况 进行一些权衡分析。在这种情况下,无法回答您的问题。 我在两个版本中看到的唯一区别是Per
问题内容: 我有一个查询,在SQL Server Management STudio中超快,在sp_ExecuteSQL下运行时超慢。 这与在spExecuteSQL下运行时不缓存执行计划有关吗? 问题答案: 不。 您可以看到两个执行计划,并使用以下查询对其进行比较。 该版本将有一个“准备好的”
主要内容:1 调用EXPLAIN,2 EXPLAIN中的列,2.1 id,2.2 select_type,2.3 table,2.4 type,2.5 possible_keys,2.6 key,2.7 key_len,2.8 ref,2.9 rows,2.10 Extra详细介绍了MySQL EXPLAIN执行计划的各个字段的含义以及使用方式。 调用EXPLAIN可以获取关于查询执行计划的信息,以及如何解释输出。EXPLAIN命令是查看查询优化器如何决定执行查询的主要方法,但该动能也有局限性,
amh rsync-client runs 如何执行多个计划 这种方式不行,有没有具体的文档?