21.04.2010, 04:14 | #20 |
Участник
|
Цитата:
X++: (B.SalesId=[COLOR=blue]right[/COLOR](space(20)+[COLOR=red]'827137'[/COLOR],20)) AND (B.SalesId=A.SALESID) Проверил у себя. Для обоих запросов выполняется Clustered Index Seek, в первом - сначала по SalesLine, потом по SalesTable и Join; во втором наоборот. Если добавить OPTION (FORCE ORDER), то планы запросов станут практически идентичными - как по использованию таблиц, так и по времени выполнения. С курсорами планы такие же, но с одним существенным отличием - поверх добавляется вставка в Tempdb, которая занимает столько же времени, сколько cам запрос, в результате время выполнения увеличивается чуть больше чем в два (!) раза. Хотя общее время выполнения все равно осталось 0,02 с OPTION (FORCE ORDER) для курсоров не сработал Поскольку WMSBILLOFLADINGORDER в нашей базе пустая, то провел эксперимент для связки SalesTable (около 100 тыс в одной компании) и VendTable (3500 записей). Можете привести свои планы по запросу с WMSBILLOFLADINGORDER для сравнения? Первый запрос - X++: SELECT A.CUSTACCOUNT,A.INVOICEACCOUNT,A.SALESID,A.RECID FROM SALESTABLE A WHERE ((A.DATAAREAID='dvc') AND (A.SALESTYPE=3)) AND EXISTS (SELECT 'x' FROM VENDTABLE B WHERE ((B.DATAAREAID='com') AND ((B.ACCOUNTNUM='СПЦ') AND (B.ACCOUNTNUM = A.CONSIGNORACCOUNT_RU)))) SELECT A.CUSTACCOUNT,A.INVOICEACCOUNT,A.SALESID,A.RECID FROM SALESTABLE A, VENDTABLE B WHERE ((A.DATAAREAID='dvc') AND (A.SALESTYPE=3)) AND ((B.DATAAREAID='com') AND ((B.ACCOUNTNUM='СПЦ') AND (B.ACCOUNTNUM = A.CONSIGNORACCOUNT_RU))) Estimated Subtree Cost: 19 и 16 соответственно Он же + FORCE ORDER: Estimated Subtree Cost: оба 19 Теперь с курсорами: Результаты одинаковы, что без. что с FORCE ORDER: 22,6 и 18,4 Выводы:
Последний раз редактировалось vanokh; 21.04.2010 в 04:16. |
|