A.Farzin
یک شنبه 30 دی 1386, 02:29 صبح
با سلام
جدولی حاوی تعداد سفارش رسیده و تعداد فروش رفته از آنها دارم. میخواهم تعداد سفارشهائی که هنوز کاملاً فروخته نشدهاند را با یک کوئری استخراج کنم.
برای این منظور از یک SubQuery استفاده کردهام. بدین شکل که Query و SubQuery هر دو به یک جدول ارجاع دارند.
کد ساخت جدول:
--- Create Table
CREATE TABLE [dbo].[OrderResult] (
[RecID] [int] IDENTITY (1, 1) NOT NULL ,
[OrderID] [int] NULL ,
[Received] [int] NULL ,
[Sold] [int] NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[OrderResult] WITH NOCHECK ADD
CONSTRAINT [PK_OrderResult] PRIMARY KEY CLUSTERED
(
[RecID]
) ON [PRIMARY]
GO
کد ورود تعدادی رکورد:
--- Insert Data
insert OrderResult(OrderID, Received, Sold) values (1125, 143, 0)
insert OrderResult(OrderID, Received, Sold) values (1217, 275, 0)
insert OrderResult(OrderID, Received, Sold) values (1219, 119, 0)
insert OrderResult(OrderID, Received, Sold) values (1220, 496, 0)
insert OrderResult(OrderID, Received, Sold) values (1125, 0, 143)
insert OrderResult(OrderID, Received, Sold) values (1217, 0, 240)
insert OrderResult(OrderID, Received, Sold) values (1219, 0, 119)
insert OrderResult(OrderID, Received, Sold) values (1220, 0, 350)
کد کوئری:
-- Query
SELECT RecID, OrderID, Received, Sold
From OrderResult Left OUTER JOIN (
SELECT RecID as RecID2, OrderID AS OrderID2, Received as Received2, Sold As Sold2
FROM OrderResult
) t2
ON OrderID = OrderID2 And Received = Sold2 And Sold = Received2
WHERE RecID2 IS NULL
ORDER BY OrderID
و اما، مشکل:
الف) این کوئری را روی دو مورد از دیتاها تست کردم در یک حالت جدول حاوی 000ر20رکورد بود و در مدت زمان مناسبی جواب را برگرداند
ب) در حالت دیگر که جدول حاوی 000ر550 رکورد بود، حدود 15 دقیقه زمان صرف اجرای آن شد و آخر سر هم آن را Cancel کردم. این در حالیست که کوئری ساده و بدون جوین از این جدول ظرف 7 ثانیه جواب میداد.
به نظر شما چرا چنین میشد. آیا ممکن است که SubQuery جدول را Lock کند؟
ممنون
جدولی حاوی تعداد سفارش رسیده و تعداد فروش رفته از آنها دارم. میخواهم تعداد سفارشهائی که هنوز کاملاً فروخته نشدهاند را با یک کوئری استخراج کنم.
برای این منظور از یک SubQuery استفاده کردهام. بدین شکل که Query و SubQuery هر دو به یک جدول ارجاع دارند.
کد ساخت جدول:
--- Create Table
CREATE TABLE [dbo].[OrderResult] (
[RecID] [int] IDENTITY (1, 1) NOT NULL ,
[OrderID] [int] NULL ,
[Received] [int] NULL ,
[Sold] [int] NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[OrderResult] WITH NOCHECK ADD
CONSTRAINT [PK_OrderResult] PRIMARY KEY CLUSTERED
(
[RecID]
) ON [PRIMARY]
GO
کد ورود تعدادی رکورد:
--- Insert Data
insert OrderResult(OrderID, Received, Sold) values (1125, 143, 0)
insert OrderResult(OrderID, Received, Sold) values (1217, 275, 0)
insert OrderResult(OrderID, Received, Sold) values (1219, 119, 0)
insert OrderResult(OrderID, Received, Sold) values (1220, 496, 0)
insert OrderResult(OrderID, Received, Sold) values (1125, 0, 143)
insert OrderResult(OrderID, Received, Sold) values (1217, 0, 240)
insert OrderResult(OrderID, Received, Sold) values (1219, 0, 119)
insert OrderResult(OrderID, Received, Sold) values (1220, 0, 350)
کد کوئری:
-- Query
SELECT RecID, OrderID, Received, Sold
From OrderResult Left OUTER JOIN (
SELECT RecID as RecID2, OrderID AS OrderID2, Received as Received2, Sold As Sold2
FROM OrderResult
) t2
ON OrderID = OrderID2 And Received = Sold2 And Sold = Received2
WHERE RecID2 IS NULL
ORDER BY OrderID
و اما، مشکل:
الف) این کوئری را روی دو مورد از دیتاها تست کردم در یک حالت جدول حاوی 000ر20رکورد بود و در مدت زمان مناسبی جواب را برگرداند
ب) در حالت دیگر که جدول حاوی 000ر550 رکورد بود، حدود 15 دقیقه زمان صرف اجرای آن شد و آخر سر هم آن را Cancel کردم. این در حالیست که کوئری ساده و بدون جوین از این جدول ظرف 7 ثانیه جواب میداد.
به نظر شما چرا چنین میشد. آیا ممکن است که SubQuery جدول را Lock کند؟
ممنون