PDA

View Full Version : تغییر ساختار منطقی SQL توسط SQL-server



Cave_Man
جمعه 25 آبان 1386, 20:28 عصر
با سلام
میخاستم علت تغییر منطقی دستورات رو بدونم
یه مثال
SELECT fld1,fld2,fld3 FROM table1 WHERE (fld1=1 OR fld2=1)AND fld3=2
این دستور بوسیله SQL server هنگام Query گرفتن به دستور زیر تغییر مییابد
SELECT fld1,fld2,fld3 FROM table1 WHERE (fld1=1 AND fld3=2)OR(fld2=1 AND fld3=2)D
علت چیه؟
چیزی که به نظر من میرسه تقدم AND به OR هست اما چرا ؟ واقعا این تغییر کد باعث افزایش کارایی یا سرعت میشه؟

Alireza Orumand
شنبه 26 آبان 1386, 08:06 صبح
در طی مراحل مختلف برای اجرای یک دستور، مرحله ی optimaization وجود داره که برای بهینه سازی اجرا، در صورت نیاز تو دستورات تغییراتی اعمل میشه.
در مورد ساختار دستور شما هم همینطور هست. وقتی شما عمل or انجام میدید تعداد رکورد های بازگشتی خیلی بیشتر از And هست. برای همین در مرحله optimaization ابتدا and اعمال میشه که با این کار تعداد رکورد هایی که در عمل or شرکت میکنند کمتر هست.
موفق باشید.

AminSobati
یک شنبه 27 آبان 1386, 21:58 عصر
ضمن اینکه پست قبلی غلط نیست، این نکته رو اضافه میکنم که الزاما چنین تغییری برای Performance نیست. Optimizer ممکنه شرطها رو به شکلی در بیاره که برای خودش قابل درک بشن. مثلا:


SELECT * FROM Customers WHERE Country IN ('UK','Spain')


تبدیل میشه به:


SELECT * FROM Customers WHERE Country='UK' OR Country='Spain'