PDA

View Full Version : ساخت ایندکس بر روی ستون تاریخ



mohsen.net
پنج شنبه 13 مرداد 1390, 14:08 عصر
سلام
من ستونی از نوع dateTime دارم که روش یک ایندکس ساختم
وقتی می خواهم کوئری بزنم چون روی زمان می خواهم این کار را انجام بدم باید cast کنم و این باعث میشه از ایندکس ساخته شده استفاده نکنه . بلکه بره سراغ clustered index . اگر هم force کنم خیلی کند میشه ، به خاطر cast میره Index Scan انجام میده
راهی هست که مثلا یک ایندکس محاسبه شده ساخت؟
یا هر راه دیگه ای که دارین بگین لطفا

DECLARE @EndTime_0_0_0 Time = CAST( '00:01:00.000' AS TIME )
Select * Into ##t30FYUQMHZVUK From Table_1 WHERE
CAST([fld_DateTime] AS time) <= @EndTime_0_0_0

AminSobati
جمعه 14 مرداد 1390, 15:22 عصر
سلام دوست عزیزم،
لطفا به نحوه جستجو در این مثال توجه بفرمایید:



CREATE TABLE TestDate(
C1 DATETIME,
C2 CHAR(8000)) -- This Column Is Used To Increase the Size of Table
GO

CREATE CLUSTERED INDEX ix1 ON TestDate(C1)
GO

-- Populate the Table With Data
INSERT TestDate VALUES('2006-1-24 12:40:30','*')
INSERT TestDate VALUES('2005-11-2 10:03:40','*')
INSERT TestDate VALUES('2004-4-13 09:50:30','*')
INSERT TestDate VALUES('2004-5-13 09:50:30','*')
INSERT TestDate SELECT * FROM TestDate
INSERT TestDate SELECT * FROM TestDate
INSERT TestDate SELECT * FROM TestDate
INSERT TestDate SELECT * FROM TestDate
INSERT TestDate SELECT * FROM TestDate
INSERT TestDate SELECT * FROM TestDate
INSERT TestDate VALUES('2008-6-10 09:50:30','*') -- The Last Row Which We Will Be Looking For!
GO


-- Check Data
SELECT C1,CONVERT(VARCHAR(30), C1, 112) FROM TestDate
GO

-- Now Search:

SET STATISTICS IO ON

SELECT * FROM TestDate
WHERE CONVERT(VARCHAR(30), C1, 112)='20080610'

SELECT * FROM TestDate
WHERE CONVERT(DATE, C1)='20080610' --SARG

mohsen.net
شنبه 15 مرداد 1390, 10:17 صبح
سلام
ممنون از وقتی که گذاشتید
اما مشکل من روی بخش تاریخ یک فیلد datetim نیست چون نیازی به Cast نداره بلکه مشکل روی تبدیل فیلد به زمان هست که خیلی زمانبر هستش
مثلا در query بالا برای پیدا کردن آخرین سطر بر اساس زمان


SELECT * FROM TestDate
WHERE CONVERT(TIME, C1)=CAST( '09:50:30' AS TIME )


که باعث Index Scan می شود .

AminSobati
یک شنبه 16 مرداد 1390, 00:50 صبح
میتونین یک Shadow Column بسازین از time، روی اون ایندکس بزنین. این column باید computed و persisted باشه