PDA

View Full Version : سوال: ممکنه این کوئری رو بهتر از این و بهینه تر نوشت؟



علیرضا حسن زاده
یک شنبه 04 مهر 1389, 09:21 صبح
SELECT Id, [Name], SndMember
FROM (SELECT Id, [Name], 'False' AS SndMember
FROM Fields
WHERE (NOT EXISTS(SELECT Field
FROM SndFields
WHERE (SndId = @SndId) AND (Fields.Id = Field)))
UNION
SELECT Id, [Name], 'True' AS SndMember
FROM Fields
WHERE EXISTS(SELECT Field
FROM SndFields
WHERE (SndId = @SndId) AND (Fields.Id = Field))) tmp
ORDER BY Id

behrouzlo
یک شنبه 04 مهر 1389, 10:06 صبح
فکر کنم کد زیر همین کاری را که شما در نظر دارید انجام بده فقط مقایسه کارایی بعهده خودتان:


Select Id,Name,Case When IsNull(Field,'') = '' Then 'False' Else 'True' End AS SndMember
From Fields Left Outer Join SndFields On Fields.Id = Field
Where SndId = @SndId

devil00x
یک شنبه 04 مهر 1389, 10:19 صبح
من برای اینکه کوئری هام رو بهینه کنم میدادم به خود enterprise manager تو قسمتی که جدول و یا ویو را باز می کردم و انتخاب گزینه اس کی ال اونجا کوئری رو پیست کن و یک با ران کن میبینی که کوئری تغییر میکنه و به نظر من بد نیست یه بار امتحانش کنی.

علیرضا حسن زاده
یک شنبه 04 مهر 1389, 16:51 عصر
من برای اینکه کوئری هام رو بهینه کنم میدادم به خود enterprise manager تو قسمتی که جدول و یا ویو را باز می کردم و انتخاب گزینه اس کی ال اونجا کوئری رو پیست کن و یک با ران کن میبینی که کوئری تغییر میکنه و به نظر من بد نیست یه بار امتحانش کنی.
من تاحالا ندیدم خود enterprise manager یا management Studio کوئری رو بهینه کنه؟ میشه بیشتر توضیح بدین؟ تا جایی که من دیدم دستورات رو مرتب میکنه نه شکل دستور رو!؟

علیرضا حسن زاده
یک شنبه 04 مهر 1389, 16:56 عصر
فکر کنم کد زیر همین کاری را که شما در نظر دارید انجام بده فقط مقایسه کارایی بعهده خودتان:


Select Id,Name,Case When IsNull(Field,'') = '' Then 'False' Else 'True' End AS SndMember
From Fields Left Outer Join SndFields On Fields.Id = Field
Where SndId = @SndId


به نظر من هم این کد شما همون کاری رو که من می خوام انجام بده رو انجام میده و لی نمی دونم چرا فقط اونهایی رو که مقدارشون SndMember شون باید False باشه رو نمیاره و فقط Trueها رو میاره!؟

behrouzlo
دوشنبه 05 مهر 1389, 09:24 صبح
اگر فیلد SndId مربوط به جدول SndFields باشد کد را به صورت زیر تغییر دهید:


Select Id,Name,Case When IsNull(Field,'') = '' Then 'False' Else 'True' End AS SndMember
From Fields Left Outer Join SndFields On Fields.Id = Field And SndId = @SndId