PDA

View Full Version : سوال: دیتابیس حجیم



mamali-mohammad
پنج شنبه 12 آذر 1394, 13:28 عصر
سلام
یه دیتابیس با رکورد 10.000.000 مورد داریم
این خط رو بزنم خیلی طول میکشه تا select کنه

"SELECT * FROM `table` WHERE `active`='1'"
بهترین راه چی می تونه باشه ؟
ممنون

us1234
پنج شنبه 12 آذر 1394, 14:21 عصر
با این سلکت هیچ تصمیم خاصی نمیشه گرفت
باید شماتیک تیبل را مشخص کنید که چندتا فیلد داره ، کدام فیلد ها اندکس شده کدام فولتکس هستند و ...

mamali-mohammad
پنج شنبه 12 آذر 1394, 14:34 عصر
با این سلکت هیچ تصمیم خاصی نمیشه گرفت
باید شماتیک تیبل را مشخص کنید که چندتا فیلد داره ، کدام فیلد ها اندکس شده کدام فولتکس هستند و ...
ممنون
جدول 40 تا ردیف داره و فیلد id رو index کردم

Unique
پنج شنبه 12 آذر 1394, 18:50 عصر
جدول 40 تا ردیف داره و فیلد id رو index کردم
منظورت ستونه دیگه ؟! آخه ردیف و سطر و رکورد یکیه !

ID که معمولا خودش unique index هست و primary. وضعیت فیلد active را مشخص کن. چه مقادیری میگیره ؟ از چه نوعیه ؟
نکته بعدی اینه از کجا دقیقا میدونی مشکل از select هست ؟! اگه داری echo میگری ! طبیعیه ۱۰ میلیون رکورد طول بکشه نمایش داده بشه !
نکته بعدی اینکه واقعا کل ۴۰ تا ستون را میخوای ؟! میدونی * خودش بهینه نیست و بهتره ستون هایی که میخوای را فقط نام ببری ؟
نکته بعدی اینکه روی سرور و لوکال به یک اندازه طول میکشه !؟

لطفا توی phpmyadmin یا هر ننرم افزار مدیریتی استفاده میکنی خروجی این را برای لوکال و سرور بگذار :

explain extended SELECT * FROM table WHERE active = '1';

us1234
پنج شنبه 12 آذر 1394, 19:57 عصر
در تکمیل باید بگم
10 میلیون رکورد را همزمان میارید داخل پی اچ پی که چه کنید !؟

پیج بندی ندارید ؟

به نظرم شما هم مانند بقیه دوستان اول سلکت را میزنید و بعد میگید خوب حالا بریم سر وقت پردازش داده های که لود شده و با یک foreach شروع به پردازش میکنید .... ( huge data )

در بدترین حالت یک صفحه نهایت نیاز به 50 الی 100 رکورد داره ( paging ) بقیه رکورد ها در صفحه بعد .

دانیال دزفولی
پنج شنبه 12 آذر 1394, 20:58 عصر
منظورت ستونه دیگه ؟! آخه ردیف و سطر و رکورد یکیه !

ID که معمولا خودش unique index هست و primary. وضعیت فیلد active را مشخص کن. چه مقادیری میگیره ؟ از چه نوعیه ؟
نکته بعدی اینه از کجا دقیقا میدونی مشکل از select هست ؟! اگه داری echo میگری ! طبیعیه ۱۰ میلیون رکورد طول بکشه نمایش داده بشه !
نکته بعدی اینکه واقعا کل ۴۰ تا ستون را میخوای ؟! میدونی * خودش بهینه نیست و بهتره ستون هایی که میخوای را فقط نام ببری ؟
نکته بعدی اینکه روی سرور و لوکال به یک اندازه طول میکشه !؟

لطفا توی phpmyadmin یا هر ننرم افزار مدیریتی استفاده میکنی خروجی این را برای لوکال و سرور بگذار :

explain extended SELECT * FROM table WHERE active = '1';

میشه بگید explain extended دقیقا چکار میکنه ؟

Unique
جمعه 13 آذر 1394, 02:31 صبح
میشه بگید explain extended دقیقا چکار میکنه ؟
یکسری اطلاعات بر میگردونه که از طریقش میشه فهمید query چطور توی mysql داره تفسیر میشه و متوجه شد باید چه Index یا تغییر دیگه ای را اعمال کرد.

R_Rajaee_Rad
جمعه 13 آذر 1394, 09:24 صبح
۴۰ تا فیلد در یک جدول؟
اونوقت همه این فیلدها پر میشن یا به تناسب نوعشون امکان NUll بودن بعضی هاشون هست؟