在这种情况下,聚集索引可以提供帮助吗?

时间:2016-09-01 17:16:30

标签: indexing sql-server-2012 sqlperformance

我们有2个桌子分配和分配。 On Dispense有一个外键PatientID。

大多数流程和查询都在患者的背景下。 目前,分配表具有非聚集索引(DispenseID,PatientID)。 DispenseDetail具有DispenseDetailID作为主键和非聚集索引(DispenseID)。

我们注意到由pageIo锁存器(sh)引起的一些缓慢,因为sql server必须将数据从磁盘带入内存。

我正在考虑一个聚集索引(DispenseID,DispenseDetailID),它可以帮助检索特定患者的分配细节,但它可能会使插入分配更加严重。分配插入更重要,因为没有它们就不会有要查询的数据。

非聚集索引(DispenseID,DispenseDetailID)会帮助吗?

非常感谢任何评论或想法。

谢谢!

sqlonly的信息

有4个物理CPU,每个CPU有6个核心,总​​共24个核心。有32个虚拟CPU。 数据库位于VM上,其中有4个物理CPU,每个CPU有6个核心,共24个核心。并且有32个虚拟CPU。 分配表有4000000+行。分配细节有11000000+行。 我不知道如何计算或获得平均页面锁定等待时间。查询sys.dm_os_latch_stats并按等待时间排序,这是结果集:


latch_class waiting_requests_count  wait_time_ms    max_wait_time_ms
BUFFER  62658377    97584783    12051
ACCESS_METHODS_DATASET_PARENT   950195  7870081 19652
ACCESS_METHODS_HOBT_VIRTUAL_ROOT    799403  5071290 5692
BACKUP_OPERATION    785245  372930  206
LOG_MANAGER 7   40403   11235
ACCESS_METHODS_HOBT_COUNT   7959    19728   1587
NESTING_TRANSACTION_FULL    122342  7969    59
ACCESS_METHODS_ACCESSOR_CACHE   67877   5143    65
ACCESS_METHODS_BULK_ALLOC   1644    734 49
ACCESS_METHODS_HOBT 15  76  15
SPACEMGR_ALLOCEXTENT_CACHE  169 71  10
SPACEMGR_IAM_PAGE_RANGE_CACHE   68  49  4
NESTING_TRANSACTION_READONLY    1942    11  1
SERVICE_BROKER_WAITFOR_MANAGER  31  9   4
TRACE_CONTROLLER    1   1   1
APPEND_ONLY_STORAGE_FIRST_ALLOC 11  1   1

在开发中,我使用当前索引来获取患者的disposseID和dispenseDetailID - 结果是索引搜索。但是,必须将结果集插入到临时表中以获取其他字段,并且插入临时表的成本很高,因此网络没有任何改进。

谢谢!

0 个答案:

没有答案