PDA

View Full Version : بهینه سازی کوئری



ym3015
یک شنبه 11 آبان 1393, 10:40 صبح
با سلام و وقت بخیر خدمت تمامی اساتید.
جداول زیر را در پایگاه داده داریم.
tblDevice(Id,Name,...)
tblPingResult(Id,DeviceId,DateTime,Result,....)
کوئری میخواستم که آخرین وضعیت دستگاه ها را بصورت یک جا بهم بده. (آخرین وضعیت یعنی Result مربوط به بزرگترین DateTime برای هر دستگاه)
برای اینکار از Query زیر استفاده کردم که هم خیلی زمانگیره هم خیلی حرفه ای نیست.
اساتید میتونن پیشنهاد برای بهینه سازی بهم بدن؟
آخه تابع ها خیلی کند هستن و تعداد رکوردهای جدول tblPingResult هر روز در حال افزایش هست. ( حدود 10 تا 15 هزار رکورد در هر روز)

SELECT
D.Id,
D.Name,
udfDevice_LastPingResult( D.Id ),
udfDevice_LastPingDateTime( D.Id )
FROM
tblDevice D
INNER JOIN tblPingResult PR
ON D.Device = PR.DeviceId
Group By
D.Id,D.Name

حمیدرضاصادقیان
شنبه 17 آبان 1393, 23:37 عصر
سلام.
توابع Scalar رو به inline Table Function ها تبدیل کنید و به با استفاده از Cross Apply اونو پیاده سازی کنید.
با این روش یک بار محاسبات داخل توابع انجام میشه نه به ازای هررکورد یک بار تابع فراخوانی بشه.