alireza sh
مدیر بازنشسته
با سلام به دوستان گرامي
مطالبي که از نظر ميگذرانيد بخشي است از تحقيق اينجانب در درس پايگاه داده که اميدوارم مورد توجه واقع گردد.
بهبود بازدهي با بهينه کردن کد SQL
با توجه به تجربيات ما ، 80 % بازدهي در SQL Server از طريق بهبود کد SQL حاصل ميشود.
Kevin kline
تجربيات نشان ميدهد که 80 تا 90 درصد بهبود بازدهي در سطح برنامه است نه در سطح پايگاه داده.
Thomas Kyte
بدون در نظر گرفتن اينکه از چه DBMS اي استفاده ميکنيد ، شما ميتوانيد بازدهي را با بهبود کد SQL نوشته شده ارتقا دهيد. اين مقاله سعي بر آن دارد تا راههاي عمده بهبود کد SQL را مستقل از نوع DBMS آموزش دهد.
بهبود باردهي از طريق بهبود syntax
يک syntax مجموعه اي است از عبارتها و نحوه قرارگيري آنها در يک عبارت بزرگتر.
معمولا نمي توان صرفا Syntax را زياد تغيير داد چراکه زبان SQL تعداد محدودي دستور دارد که در آنها گزينه هاي اختياري زيادي وجود دارد.اما مهمترين Syntax اي که قابليت بهينه سازي زيادي دارد عبارتهاي شرطي در جستجوهاست.
در يک عبارت ميتوانيم بگوييم بهترين جستجوهاي شرطي آنهايي هستند که روي تعداد کمي از سطرها اعمال ميشوند.
امتيازدهي به عبارت SQL
جدول زير اين شروط را از بهترين به بدترين مرتب ميکند.
علامت ----- جداساز ستونها و علامت |<>| جداساز عملگر و امتياز آن است (خدا بگم چيکارتون کنه با اين اديتورتون
____________________________________________
امتياز |<>| عملگر -------------- امتياز | عملگر
____________________________________________
10 |<>| = -------------- 10 |<>| کاراکتر تنها
____________________________________________
5 |<>| > -------------- 5 |<>| ستون تنها
____________________________________________
5 |<>| > = -------------- 5 |<>| پارامتر تنها
____________________________________________
5 |<>| < -------------- 3 |<>| عبارت ترکيبي
____________________________________________
5 |<>| < = -------------- 2 |<>| نوع داده اي عددي
____________________________________________
3 |<>| LIKE ک -------------- 1 |<>| انواع داده اي ديگر
____________________________________________
0 |<>| <> -------------- 0 |<>| نوع داده اي کاراکتر
____________________________________________
---------------------------- 0 |<>| NULL
____________________________________________
به اين مثال دقت کنيد :
اين شرط جستجو 27 امتياز خواهد داشت :
• 5 امتياز براي ستون smallint_column که بتنهايي در سمت چپ قرار دارد
• 2 امتياز براي نوع داده اي ستون smallint_column که عددي است
• 10 امتياز براي عملگر مساوي
• 10 امتياز براي عبارت عددي 12345 که به تنهايي در سمت راست قرار دارد
حال به اين مثال دقت کنيد :
اين مثال تنها 13 امتياز خواهد داشت :
• 5 امتياز براي ستون char_column که بتنهايي در سمت چپ قرار دارد
• 5 امتياز براي عملگر > =
• 3 امتياز براي عبارت ترکيبي varchar_column | | 'x'
اما چنانچه آن را به صورت زير در آوريم :
آنگاه 15 امتياز خواهد گرفت که کاملا منطقي است. چرا که عمل or بين varchar_column و 'x' فقط يکبار انجام ميشود.
قرار دادن ستونها در ترتيب صحيح خود
يکي از راههاي بهبود بازدهي در زماني که در يک عبارت جستجو ميخواهيم چند ستون را شرکت دهيم ، رعايت ترتيب ستونهاست مثل :
نکته : اکثر DBMS هاي معروف به طور خودکار اين عمل را انجام ميدهند.
مطالبي که از نظر ميگذرانيد بخشي است از تحقيق اينجانب در درس پايگاه داده که اميدوارم مورد توجه واقع گردد.
بهبود بازدهي با بهينه کردن کد SQL
با توجه به تجربيات ما ، 80 % بازدهي در SQL Server از طريق بهبود کد SQL حاصل ميشود.
Kevin kline
تجربيات نشان ميدهد که 80 تا 90 درصد بهبود بازدهي در سطح برنامه است نه در سطح پايگاه داده.
Thomas Kyte
بدون در نظر گرفتن اينکه از چه DBMS اي استفاده ميکنيد ، شما ميتوانيد بازدهي را با بهبود کد SQL نوشته شده ارتقا دهيد. اين مقاله سعي بر آن دارد تا راههاي عمده بهبود کد SQL را مستقل از نوع DBMS آموزش دهد.
بهبود باردهي از طريق بهبود syntax
يک syntax مجموعه اي است از عبارتها و نحوه قرارگيري آنها در يک عبارت بزرگتر.
معمولا نمي توان صرفا Syntax را زياد تغيير داد چراکه زبان SQL تعداد محدودي دستور دارد که در آنها گزينه هاي اختياري زيادي وجود دارد.اما مهمترين Syntax اي که قابليت بهينه سازي زيادي دارد عبارتهاي شرطي در جستجوهاست.
در يک عبارت ميتوانيم بگوييم بهترين جستجوهاي شرطي آنهايي هستند که روي تعداد کمي از سطرها اعمال ميشوند.
امتيازدهي به عبارت SQL
جدول زير اين شروط را از بهترين به بدترين مرتب ميکند.
علامت ----- جداساز ستونها و علامت |<>| جداساز عملگر و امتياز آن است (خدا بگم چيکارتون کنه با اين اديتورتون
____________________________________________
امتياز |<>| عملگر -------------- امتياز | عملگر
____________________________________________
10 |<>| = -------------- 10 |<>| کاراکتر تنها
____________________________________________
5 |<>| > -------------- 5 |<>| ستون تنها
____________________________________________
5 |<>| > = -------------- 5 |<>| پارامتر تنها
____________________________________________
5 |<>| < -------------- 3 |<>| عبارت ترکيبي
____________________________________________
5 |<>| < = -------------- 2 |<>| نوع داده اي عددي
____________________________________________
3 |<>| LIKE ک -------------- 1 |<>| انواع داده اي ديگر
____________________________________________
0 |<>| <> -------------- 0 |<>| نوع داده اي کاراکتر
____________________________________________
---------------------------- 0 |<>| NULL
____________________________________________
به اين مثال دقت کنيد :
کد:
…. Where smallint_column = 1234
اين شرط جستجو 27 امتياز خواهد داشت :
• 5 امتياز براي ستون smallint_column که بتنهايي در سمت چپ قرار دارد
• 2 امتياز براي نوع داده اي ستون smallint_column که عددي است
• 10 امتياز براي عملگر مساوي
• 10 امتياز براي عبارت عددي 12345 که به تنهايي در سمت راست قرار دارد
حال به اين مثال دقت کنيد :
کد:
… WHERE char_column > = varchar_column | | 'x'
• 5 امتياز براي ستون char_column که بتنهايي در سمت چپ قرار دارد
• 5 امتياز براي عملگر > =
• 3 امتياز براي عبارت ترکيبي varchar_column | | 'x'
اما چنانچه آن را به صورت زير در آوريم :
کد:
GET var AS varchar_column | | 'x'.
…. WHERE char_column > = var
قرار دادن ستونها در ترتيب صحيح خود
يکي از راههاي بهبود بازدهي در زماني که در يک عبارت جستجو ميخواهيم چند ستون را شرکت دهيم ، رعايت ترتيب ستونهاست مثل :
کد:
SELECT * FROM Table1
WHERE column1 = 5
AND column2 = 77.3
AND column3 = 'Smith'
AND column4 < 117
AND column4 > column5