PDA

View Full Version : سوال: بنظرتون خواندن 50 هزار رکورد از دیتابیس چه مدت زمان لازم داره؟



idocsidocs
چهارشنبه 16 فروردین 1391, 13:32 عصر
من دارم یه سایت مپ داینامیک می سازم.

همونطور که می دونید تعداد لینکهای این فایل نباید از 50 هزار لینک بیشتر باشه.

با توجه به محدودیت زمانی در اتصالهای دیتابیس، آیا ممکنه که قبل از خوندن همه محتویات، محدودیت زمانی اتصال به دیتابیس تموم بشه و فایل سایت مپ ایجاد نشه؟

لطفا توضیح بدید.

MMSHFE
چهارشنبه 16 فروردین 1391, 15:15 عصر
معمولاً اینطور نمیشه ولی میتونید با بررسی، مدت زمان استخراج کوئری رو بدست بیارین و اگه دیدین زیاد هست، کوئری رو به چند قسمت تقسیم کنید. البته با WHERE رکوردها رو بخونید و تعداد خوندنها رو محدود کنید. مثلاً:

SELECT * FROM `table` WHERE (`id`<10000);
SELECT * FROM `table` WHERE (`id`>=10001 AND `id`<20000);
SELECT * FROM `table` WHERE (`id`>=20001 AND `id`<30000);
SELECT * FROM `table` WHERE (`id`>=30001 AND `id`<40000);
SELECT * FROM `table` WHERE (`id`>=40001 AND `id`<50000);

برای این کار بهتره از LIMIT استفاده نکنید چون درهرحال همه رکوردها رو میخونه و بعد اون چندتایی که میخواین رو برمیگردونه، درنتیجه زمان استخراج کوئری نه تنها کمتر نمیشه، بلکه بخاطر تفکیک نتایج و جداکردن بخشی که شما مشخص کردین، کمی زمان بیشتر هم خواهد شد.
موفق باشید.

idocsidocs
دوشنبه 21 فروردین 1391, 17:59 عصر
برای این کار بهتره از LIMIT استفاده نکنید چون درهرحال همه رکوردها رو میخونه و بعد اون چندتایی که میخواین رو برمیگردونه، درنتیجه زمان استخراج کوئری نه تنها کمتر نمیشه، بلکه بخاطر تفکیک نتایج و جداکردن بخشی که شما مشخص کردین، کمی زمان بیشتر هم خواهد شد.
تا اونجا که می دونم شرط لیمیت باعث افزایش سرعت کوئری می شه اما شما ظاهرا با این گفته موافق نیستید. من اشتباه متوجه شدم یا شما منظورتون چیز دیگه ای هست؟

MMSHFE
سه شنبه 22 فروردین 1391, 00:17 صبح
نه دوست عزیز، Limit سرعت رو افزایش نمیده، بلکه بخاطر تفکیک نتایج، سرعت کاهش پیدا میکنه. فقط ازنظر مصرف حافظه کمی بهتر عمل میکنه که اونهم بخاطر اینه که رکوردهای کمتری رو برمیگردونه که با کمک شرط WHERE میشه نتیجه مشابهی بدست آورد.

idocsidocs
سه شنبه 22 فروردین 1391, 00:45 صبح
نه دوست عزیز، Limit سرعت رو افزایش نمیده، بلکه بخاطر تفکیک نتایج، سرعت کاهش پیدا میکنه. فقط ازنظر مصرف حافظه کمی بهتر عمل میکنه که اونهم بخاطر اینه که رکوردهای کمتری رو برمیگردونه که با کمک شرط WHERE میشه نتیجه مشابهی بدست آورد.


شما استفاده از Limit توی کدها رو پیشنهاد می دید یا نه؟

MMSHFE
سه شنبه 22 فروردین 1391, 00:58 صبح
اگه تعداد رکوردها زیاد نباشه مشکلی پیش نمیاره ولی توی رکوردهای بالا سرعت رو خیلی کم میکنه. مثلاً فرض کنید یک میلیون رکورد دارین و بعد میخواین از رکورد 500 هزارم تا 501 هزار رو نشون بدین. اینجا درهرحال باید یک میلیون رکورد خونده بشه و بعد هزارتاش جدا بشه ولی با WHERE میتونید همون هزارتا رو استخراج کنید.
موفق باشید.

idocsidocs
سه شنبه 22 فروردین 1391, 10:06 صبح
لطفا توی این کوئری بجای limit از where استفاده کنید:

select * from `tb` where (`id`>5000 && `id`<5100) LIMIT 100

MMSHFE
سه شنبه 22 فروردین 1391, 19:33 عصر
خود این کوئری داره 100 رکورد برمیگردونه. Limit نمیخواد که.

idocsidocs
سه شنبه 22 فروردین 1391, 20:18 عصر
خود این کوئری داره 100 رکورد برمیگردونه. Limit نمیخواد که.
پس منظورتون اینه که هرجا از where استفاده شد، دیگه نیازی به استفاده از Limit نیست؟

MMSHFE
سه شنبه 22 فروردین 1391, 23:00 عصر
نه هرجا. کلاً اگه بشه با WHERE محدود کنیم نیازی به Limit نیست ولی بعضی جاها نمیشه با WHERE محدودیت دلخواه رو اعمال کرد. مثلاً از بین کاربرانی که اسم اونها حاوی کلمه ali هست، 10 مورد رو جدا کنیم. در اینجا چون نمیدونیم id این افراد چیه نمیشه با where محدودیت اعمال کرد مگه اینکه از روشهای ترکیبی و ثابتهای مخصوص MySQL استفاده کنیم که کمی کار مشکل میشه و همون Limit به صرفه تر هست. موفق باشید.

idocsidocs
چهارشنبه 23 فروردین 1391, 02:20 صبح
mysql برای هر کوئری از ابتدای جدول شروع به سرچ کردن می کنه یا اینکه الگوریتمهای خاصی داره تا زمان پردازش رو کمتر کنه؟

MMSHFE
چهارشنبه 23 فروردین 1391, 08:03 صبح
بستگی به فیلدی داره که شرط براش گذاشتیم. اگه Index باشه بصورت انجمنی کار میشه و درواقع جدول مثل یک درخت شاخه بندی میشه و مثل وقتی که سر کلاس استاد اسم یکی رو میاره و اون فرد خودش دستش رو بالا میگیره (و استاد دیگه یکی یکی از افراد اسمشون رو نمیپرسه تا اون فرد رو پیدا کنه)، اینجا هم شرط رو برای ریشه درخت میفرسته و خود اون رکوردی که شرط داخلش برقرار باشه، flag مربوط به پاسخ رو Set میکنه. درنتیجه دیگه رکوردها یکی یکی بررسی نمیشن. برای همین هم سرعت جستجو در رکوردهای Index شده بیشتره. در حالتهای معمولی هم از روشهایی مثل درخت جستجویی باینری برای افزایش سرعت استفاده میشه. موفق باشید.

armsoftpc
چهارشنبه 23 فروردین 1391, 16:32 عصر
به نام خدا
با سلام
mysql حداقل تا چند رکورد در جدولاش و تا چند رکورد در دیتابیس هاش جا دارد و چند دیتابیس حداکثر می توانیم در آن بسازیم.
آیا این حجم ها با آمدن نسخه های جدید تر از آن افزایش می یابد، اگر نه چرا؟
آمار دقیق و جدید این اطلاعات در کجا قرار دارد ، (لطفا لینک دقیق بدید.)
آیا واقعا تا این حجم می توان اطلاعات در پایگاه داده ذخیره کرد، سرعت را چگونه باید افزایش بدهیم و چگونه باید از این همه اطلاعات بکاپ بگیریم.