Хелп! Есть база на MS 2000. В ней табличка, 46 полей, 70 тыс. записей, запрос вида SELECT * FROM Table ORDER BY DDate вылняется несколько секунд на довольно мощной машине. Индекс по DDate имеется.
Этот же запрос на Sybase ASA 7 с такой же табличкой выполняется в 3 разa быстрее.
Но это полбеды. Нижеприведенный запрос открывается в MS вообще за неприличное время. На Sybase почти мгновенно.
Если убрать сортировку по DDate, то и на MS открывается мгновенно. DDate типа DateTime.
Куда нужно копать?!
Необходимо как можно быстрее открывать запрос, фетчить все записи не нужно.
SELECT
T.OrderNo AS ObjectIDField,
T.OrderNo AS OrderNo,
T.Status AS Status,
T.Operation AS Operation,
T.DDate AS DDate,
T.DDate AS DocDate,
T.PartNo AS tPartNo_132_ID,
T132_10_132.Articoli AS Articoli,
T.PartNo AS tPartNo_90_ID,
T90_11_90.Desсription AS PDesсription,
T.Qty AS Qty,
T.Payed AS Payed,
T.Price AS Price,
T.Discount AS Discount,
T.Cost1 AS Cost1,
T.PartNo AS PartNo,
T.DocTime AS DocTime,
T.Sender AS tSender_94_ID,
T94_208_94.Desсription AS SenDesсription,
T.Sender AS tSender_1791_ID,
T1791_209_1791.GroupNo AS SenGroupNo,
T.Receiver AS tReceiver_95_ID,
T95_208_95.Desсription AS RecDesсription,
T.OrdInternalID AS OrdInternalID,
T.PaperNo AS PaperNo,
T.FakturaNo AS FakturaNo,
T.ShetNo AS ShetNo,
T.GTDNo AS GTDNo,
T.Saler AS tSaler_93_ID,
T93_208_93.Desсription AS SalDesсription,
T.Sender AS Sender,
T.ComplectDesc AS ComplectDesc,
T.PayedUSD AS PayedUSD,
T.PriceUSD AS PriceUSD,
T.ArticleID AS tArticleID_112_ID,
T112_202_112.ArticleName AS ArticleName,
T.Receiver AS Receiver,
T.SumPayed AS SumPayed,
T.SumPrice AS SumPrice,
T.CurrRate AS CurrRate,
T.Saler AS Saler,
T.ManagerID AS tManagerID_117_ID,
T117_208_117.Desсription AS ManDesсription,
T.PriceColumn AS PriceColumn,
T.PayStatus AS PayStatus,
T.Priznak1 AS Priznak1,
T.Priznak2 AS Priznak2,
T.DateUpdate AS DateUpdate,
T.KKMNumber AS KKMNumber,
T.KKMSection AS KKMSection,
T.ArticleID AS ArticleID,
T.ManagerID AS ManagerID,
T.UpSize AS UpSize,
T.Err AS Err,
T.UserCreateID AS UserCreateID,
T.UserUpdateID AS UserUpdateID,
T.DateCreate AS DateCreate,
T.FirmID AS FirmID,
T.FirmID AS tFirmID_116_ID,
T116_208_116.Desсription AS FDesсription,
T.ORD1No AS ORD1No,
T.PaperNoInt AS PaperNoInt,
T.Srok AS Srok,
T.SCode AS SCode,
T.DDateInput AS DDateInput,
T.RPL AS RPL,
T.PartNo AS tPartNo_1799_ID,
T1799_14_1799.GroupNo AS GGroupNo,
T.PartNo AS tPartNo_1790_ID,
T1563_1024_1790.IzmName AS IzmName
FROM
Orders T
LEFT OUTER JOIN Parts T132_10_132 ON T.PartNo = T132_10_132.PartNo
LEFT OUTER JOIN Parts T90_11_90 ON T.PartNo = T90_11_90.PartNo
LEFT OUTER JOIN VENDORS T94_208_94 ON T.Sender = T94_208_94.VendorNo
LEFT OUTER JOIN VENDORS T1791_209_1791 ON T.Sender = T1791_209_1791.VendorNo
LEFT OUTER JOIN VENDORS T95_208_95 ON T.Receiver = T95_208_95.VendorNo
LEFT OUTER JOIN VENDORS T93_208_93 ON T.Saler = T93_208_93.VendorNo
LEFT OUTER JOIN Articles T112_202_112 ON T.ArticleID = T112_202_112.ArticleID
LEFT OUTER JOIN VENDORS T117_208_117 ON T.ManagerID = T117_208_117.VendorNo
LEFT OUTER JOIN VENDORS T116_208_116 ON T.FirmID = T116_208_116.VendorNo
LEFT OUTER JOIN Parts T1799_14_1799 ON T.PartNo = T1799_14_1799.PartNo
LEFT OUTER JOIN Parts T1790_1563_1790 ON T.PartNo = T1790_1563_1790.PartNo
LEFT OUTER JOIN Izm T1563_1024_1790 ON T1790_1563_1790.IzmNo = T1563_1024_1790.IzmNo
order by DDate
Тормозит MS SQL
Сделай перед вызовом запросаНеобходимо как можно быстрее открывать запрос, фетчить все записи не нужно.
Код: Выделить всё
SET ROWCOUNT 10
Судя по описанию можно попробовать создать кластерный индекс именно по дате.Индекс по DDate имеется.
Если убрать сортировку по DDate, то и на MS открывается мгновенно. DDate типа DateTime
А outer join'ы быстро работать и не будут.
Даже самый дурацкий замысел можно воплотить мастерски
Мне нужно получить не 10 строк ), а чтобы запрос быстрее выполнился, как на Sybase.
Кластерный индекс делал - бестолку.
Вообще, заметил: для этой таблицы даже без джойнов долго открывается запрос, если сортировать, или много полей в селекте.
Разве 70000 это так много, чтобы тормозить при сортировки по индексированному полю?
Кластерный индекс делал - бестолку.
Вообще, заметил: для этой таблицы даже без джойнов долго открывается запрос, если сортировать, или много полей в селекте.
Разве 70000 это так много, чтобы тормозить при сортировки по индексированному полю?
Проверьте сортировку индекса!
Asc или Desc, если в индексе Desc а запрос детфолтно Asc требует, то индекс использыватсья не будет.
Asc или Desc, если в индексе Desc а запрос детфолтно Asc требует, то индекс использыватсья не будет.
-------------
Лень - двигатель прогресса!
Лень - двигатель прогресса!
Оказалось все просто: OPTION (FAST 50). Все летает.