PDA

View Full Version : مقایسه چند شکل کوئری برای شمردن تعداد رکوردها



eshpilen
جمعه 17 آذر 1391, 17:18 عصر
این یه روش:

select * from `table` where ...
mysql_num_rows
اینم یه روش:

select 1 from `table` where ...
mysql_num_rows
اینم یه روش دیگه:

select sum(1) from `table` where ...
mysql_fetch_row

اینم احتمالا با قبلی تقریبا معادل باشه (از نظر پرفورمنس و مصرف منابع):

select count(*) from `table` where ...
mysql_fetch_row
حقیقتش این آخری رو یادم رفته بود که یکی گفت و اضافه کردم.
در زیر هر کوئری اسم تابعی رو که برای بدست آوردن نتیجه نیاز به اجراش داریم آوردم، چون ممکنه اون تابع هم تفاوتی مثلا در پرفورمنس ایجاد کنه.
حالا من دنبال بهینه سازیهای جزیی نیستم، و بنابراین اگر اختلاف سرعت و مصرف منابع این روشها با هم کم باشه، بنظر من باید از روشی که در مجموع خواناتره/از نظر کدنویسی ساده تر/سریعتر/کوتاهتره استفاده کنیم.
ولی اگر اختلاف پرفورمنس و مصرف منابع بتونه زیاد باشه، پس بهتره از روشی که بهینه تره استفاده کنیم. چون در کل هم از نظر خوانایی و کدنویسی بنظرم این روشها تفاوت زیادی ندارن.
راستی به اینم باید فکر کرد که شاید وجود یا عدم وجود شرط در کوئری بتونه تاثیر زیادی در پرفورمنس داشته باشه. حالا من نمونه های با where رو گذاشتم، ولی بعضی جاها هم ممکنه کوئری بدون شرط داشته باشیم. مثلا میگن در MyISAM تعداد رکوردهای کوئری های ‎‎select *‎ خیلی سریع درمیاد؛ البته فکر کنم در حالتی که کوئری شرط نداشته باشه (یعنی منطقیش اینطور بنظر میرسه).