PDA

View Full Version : حرفه ای: کدام نوع بهتره ، ذخیره کردن یا COUNT ؟؟



binyaft
جمعه 01 بهمن 1389, 13:53 عصر
سلام دوستان ، خسته نباشید


میخواستم بدونم برای نشون دادن تعداد رکورد های مربوط به ی کاربر بهتر هست که تعداد رو در دیتابیس ذخیره کنیم و بعد کمک و زیاد کنیم و یا بهتره که از کئوری COUNT استفاده کنیم ؟؟

ممنون :بوس:

ayub_coder
جمعه 01 بهمن 1389, 15:49 عصر
به نظر من بهتری از count استفاده کنی
این چه کاریه که اول تو دیتابیس بنویسی بعد دوباره بخونی. یه دفعه با count می خونیش دیگه:گیج:

binyaft
جمعه 01 بهمن 1389, 17:06 عصر
:D
اخه شنیدم COUNT یکم کند عمل میکنه و رو دیتابیس فشار میاره!
من تو صفحه نزدیک به 20 بار کئوری COUNT ارسال میکنم

fcsooti
جمعه 01 بهمن 1389, 17:54 عصر
به نظر من بسته به شرایط داره و اینکه کجا بخواهی استفاده کنی، مثلا یه فروم داری و می خواهی در کنار مشخصات یوزر بنویسی که چندتا پست ارسال کرده اینجا بهتره که تو تیبل مشخصات کاربران یه ستون اضافه کنی و با هر پستی که ارسال می کنه یه دونه به اون اضافه کنی، وقتی هم که می خواهی مشخصات کاربر رو نشون بدی با یه کوئری هم مشخصات کاربر رو می گیری و هم تعداد پست هاش رو. ولی یه جای دیگه مثلا نشون دادن تعداد کاربران آنلاین زیاد جالب نیست که تعدادشون رو در بیاری و بریزی تو تیبل و از اونور دوباره بخونی دوباره چند لحظه بعد دوباره تعداد رو بخونی و اون ستون رو آپدیت کنی و همون قصه قبلی.

Hell Lord
جمعه 01 بهمن 1389, 18:45 عصر
از
count(*) استفاده کنید به جای
count(id) ، این دومی افتضاح سرعت را پایین میاورد!! اون چیزی که شما شنیدید احتمال زیاد دومی هست.

ayub_coder
جمعه 01 بهمن 1389, 19:15 عصر
این در مورد همه انواع select صدق می کنه یا فقط تو count که انتخاب یک فیلد سرعت رو پایین میاره؟
آخه شنیده بودیم توی select ها اگه * بذاریم سرعت کاهش پیدا می کنه و اگه یک فیلد در select وجود داشته باشه باعث کاهش زمان اجرا میشه.:متفکر:

Hell Lord
جمعه 01 بهمن 1389, 20:01 عصر
در موتور MyIsam، چون شماره ی ردیف های جدول ذخیره میشود ،
count(*) باعث افزایش سرعت میشود، اما
count(id) باعث میشود که جستجو در بین ردیف ها انجام شود که سرعت را کاهش میدهد.
در مورد سلکت چیزی که شما شنیدید صحیح است.

امیـرحسین
جمعه 01 بهمن 1389, 22:00 عصر
اگر فیلد ایندکس رو COUNT کنید از هر روش دیگه ای بهتره!


از
count(*) استفاده کنید به جای
count(id) ، این دومی افتضاح سرعت را پایین میاورد!! اون چیزی که شما شنیدید احتمال زیاد دومی هست.
(COUNT(id زمانی سرعت رو پایین میاره که یا id ایندکس نباشه یا داریم توسط WHERE فیلدهای ایندکس نشده رو چک می کنیم. نه همیشه!

Hell Lord
جمعه 01 بهمن 1389, 22:21 عصر
اگر فیلد ایندکس رو COUNT کنید از هر روش دیگه ای بهتره!


(COUNT(id زمانی سرعت رو پایین میاره که یا id ایندکس نباشه یا داریم توسط WHERE فیلدهای ایندکس نشده رو چک می کنیم. نه همیشه!

درسته ممنون ، اما باز سرعت * بیشتر از جستجو در فیلد ایندکس شده هستش (با وجود where).
حتی نال بودن یک فیلد هم سرعت را کاهش میدهد (با وجود where)

البته من که کسی نیستم که این چیزهارو تشخیص بدم، از جاهای مختلفی که تست کردند خواندم :قلب:

ayub_coder
شنبه 02 بهمن 1389, 00:14 صبح
بالاخره ستاره بذاریم بهتره با اسم فیلدهارو بنویسیم.؟:متفکر:

امیـرحسین
شنبه 02 بهمن 1389, 01:28 صبح
این مقاله رو مطالعه کنید که کامل توضیح داده کجا باید از چه روشی استفاده کرد: (COUNT(*) vs COUNT(col (http://www.mysqlperformanceblog.com/2007/04/10/count-vs-countcol/)

alonemm
یک شنبه 03 بهمن 1389, 11:52 صبح
با سلام:

به نظر من اگه فیلد ID شما فیلد کلیدی باشه و روش INDEX انجام داده شده باشه سرعتش خیلی بالاتر هست نسبت به فیلد *.

tbebest
یک شنبه 03 بهمن 1389, 12:56 عصر
دیگه نگا نندازین چون امیرحسین هم همینجا رو لینک زده.
//یه نگا به اینجا (http://www.mysqlperformanceblog.com/2007/04/10/count-vs-countcol/)بندازین.با تشکر.

alonemm
یک شنبه 03 بهمن 1389, 13:11 عصر
باسلام:
اگه شما فیلد ID رو اندکس کنید و از اون استفاده کنید سرعت نصبت به * بالاتر هست/