sql-server – ‘SELECT TOP’机能题目
我有一个查询,选择前100名运行得更快,而前100名则慢得多.返回记录的数目为0.
没有热点笔墨的查询: SELECT --TOP 100 * FROM InventTrans JOIN InventDim ON InventDim.DATAAREAID = 'dat' AND InventDim.INVENTDIMID = InventTrans.INVENTDIMID WHERE InventTrans.DATAAREAID = 'dat' AND InventTrans.ITEMID = '027743' AND InventDim.INVENTLOCATIONID = 'КзРЦ Алмат' AND InventDim.ECC_BUSINESSUNITID = 'Казахстан'; 上面的查询打算(没有顶部): https://pastebin.com/cbtJpxFf IO和TIME统计信息(无顶部): SQL Server parse and compile time: CPU time = 0 ms,elapsed time = 0 ms. SQL Server Execution Times: CPU time = 0 ms,elapsed time = 0 ms. SQL Server parse and compile time: CPU time = 0 ms,elapsed time = 0 ms. (0 row(s) affected) Table 'INVENTDIM'. Scan count 0,logical reads 988297,physical reads 0,read-ahead reads 1,lob logical reads 0,lob physical reads 0,lob read-ahead reads 0. Table 'INVENTTRANS'. Scan count 1,logical reads 1234560,read-ahead reads 14299,lob read-ahead reads 0. (1 row(s) affected) SQL Server Execution Times: CPU time = 6256 ms,elapsed time = 13348 ms. SQL Server parse and compile time: CPU time = 0 ms,elapsed time = 0 ms. 行使的索引(没有顶部): 1. INVENTTRANS.I_177TRANSIDIDX 4 KEYS: - DATAAREAID - INVENTTRANSID - INVENTDIMID - RECID 2. INVENTTRANS.I_177ITEMIDX 3 KEYS: - DATAAREAID - ITEMID - DATEPHYSICAL 3. INVENTDIM.I_698DIMIDIDX 2 KEYS: - DATAAREAID - INVENTDIMID 顶部的查询: SELECT TOP 100 * FROM InventTrans JOIN InventDim ON InventDim.DATAAREAID = 'dat' AND InventDim.INVENTDIMID = InventTrans.INVENTDIMID WHERE InventTrans.DATAAREAID = 'dat' AND InventTrans.ITEMID = '027743' AND InventDim.INVENTLOCATIONID = 'КзРЦ Алмат' AND InventDim.ECC_BUSINESSUNITID = 'Казахстан'; 查询打算(带TOP): https://pastebin.com/0dyu6QZd 查询IO和TIME统计信息(带TOP): SQL Server parse and compile time: CPU time = 0 ms,elapsed time = 0 ms. (0 row(s) affected) Table 'Worktable'. Scan count 0,logical reads 0,read-ahead reads 0,lob read-ahead reads 0. Table 'INVENTTRANS'. Scan count 15385,logical reads 82542,lob read-ahead reads 0. Table 'INVENTDIM'. Scan count 1,logical reads 62704,lob read-ahead reads 0. (1 row(s) affected) SQL Server Execution Times: CPU time = 265 ms,elapsed time = 257 ms. SQL Server parse and compile time: CPU time = 0 ms,elapsed time = 0 ms. 行使的索引(带TOP): 1. INVENTTRANS.I_177TRANSIDIDX 4 KEYS: - DATAAREAID - INVENTTRANSID - INVENTDIMID - RECID 2. INVENTTRANS.I_177DIMIDIDX 3 KEYS: - DATAAREAID - INVENTDIMID - ITEMID 3. INVENTDIM.I_698DIMIDIDX 2 KEYS: - DATAAREAID - INVENTDIMID 4. INVENTDIM.I_698ECC_BUSUNITLOCIDX 3 KEYS - DATAAREAID - ECC_BUSINESSUNITID - INVENTLOCATIONID 将深深感激有关该主题的任何辅佐! 办理要领SQL Server行使差异的排序算法为TOP 100构建差异的执行打算.偶然它更快,偶然它更慢.有关它的简朴示例,请阅读How Much Can One Row Change A Query Plan? Part 1和Part 2. 有关深入的技能细节,以及TOP 100算法现实较慢的示例,请阅读Paul White’s Sorting,Row Goals,and the TOP 100 Problem. 底线:在你的环境下,假如你知道不会返回任何行,那么……不要运行查询,是吗?最快的查询是你从未做过的.可是,假如您必要举办存在搜查,只需执行IF EXISTS(在此处查询),然后SQL Server将执行乃至差异的执行打算. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |