PDA

View Full Version : سوال: حداکثر تعداد ستون در یک جدول



tehro0n
چهارشنبه 28 تیر 1391, 00:59 صبح
سلام،
من جدولی دارم که در یک query مجبورم اکثریت ستون ها بسته به خواسته کاربر و به روز کردن اکثریت آن ستون ها را داشته باشم.
می خوام بدونم حداکثر ستون برای یک جدول چقدر می تونه باشه که مشکلی ایجاد نکنه
در حال حاضر 70 ستون دارم که برای نمایش بهتر و راحت تر برای کاربر می خوام این 70 را به 76 یا 77 برسونم
البته باز تاکید می کنم که در هر بار بازدید که تعداد بازدید ها نیز بالای 700000 در روز است این 70 ستون نیاز هستند که با هم و در یک حلقه یا یک بخش نمایش داده شوند

اگه این تعداد زیاده بهترین راه حل چیست؟
با یک کوئری میشه چند select گرفت ولی آیا این بهتر است که این چند select یا update انجام بشه در ازاش تعداد ستون ها کمتر و تعداد جداول بیشتر شه، یا همین حالت مشکلی ایجاد نمی کنه

ممنون

pejman_view
چهارشنبه 28 تیر 1391, 07:51 صبح
سلام

این بحث مربوط می شه به متخصص های دیتابیس، من تا اونجایی که شنید 3000 به بالا محدودیت mysql که این عدد کمی نیست اما اصول طراحی دیتابیس می گه شما می توانید 3000 ستون داشته باشید بدون اینکه ناراحت باشید که این ستون ها باعث افت سرعتتان می شود:
1- اصل نرمالیزاسیون رعایت شود.
2- تا آنجایی که می شود دسته بندی خود را درست کنید. این یعنی چی حالا! فرضاً میای حساب می کنی کاربرها هنگام ورود به سایت فقط 10 تا از این ستون ها را استفاده می کنند! موقعی لاگین کردن به اکانتش از 20 تا و وقتی وارد یه بخش از سایت شدن از 30 تا همزمان استفاده می کنند. خوب حالا با خودت حساب می کنی فرضاً 100 درصد کاربرها به صفحه اصلی سایت سر می زنند پس 10 تا ستون رو نگه می دارم. و از این 100 درصد 80 درصد هم لاگین می کنند خوب میام می بینیم پس می توانم در این جدول 20 تا نگه دارم اما فقط 5 درصد از کاربرها به اون ناحیه خاص می رن و سالی یه بار! پس در نتیجه آن 10 تا را جدا می کنم. و می گذارم هر وقت وارد آن ناحیه شدند این جدول سلکت شود.
حالا یه بحث دیگه هم که باید مد نظر بگیری اینه که ممکن این 20 تا هم جدا شوند! چون بعضی از چیزها نیاز به موتورهای مختلف دیتابیس دارند فرضاً بعضی از ستون ها به MyISAM نیاز دارند و بعضی به InnoDB پس این ها هم باید در دسته مختلف قرار بگیرند.
و حالا یه بحث دیگه هم پیش میاد طبق اصل نرمال سازی گفتند هر چقدر ستون ها بیشتر بشه طبق اصول مشکلی پیش نمیاد اما در بعضی موارد بهتر ستون ها برای خرد شدن در یک جدول دیگه قرار بگیرند.

این ها همشون حرف بودند که دیگه ممکن هر برداشتی بکنی! اگر بگردی نمونه دیتابیس های کار خودت رو پیدا کنی طبق این اصول طراحی شده باشند خیلی راحت تر متوجه می شوی که چی به چیه.

یا علی
موفق باشید

desatir7316
چهارشنبه 28 تیر 1391, 09:43 صبح
tehroon عزیز اگه این مطلب به انجمن پایگاه داده انتقال بدی بهتره


- اصل نرمالیزاسیون رعایت شود.
دوستمون درست می گه
معمولا نرمال سازی تا سطح 3 یا 4 توی دیتا بیس ها انجام می شه مگه اینکه یه دیتابیسی استثنا باشه
حتما نرمال سازی کن



ا آنجایی که می شود دسته بندی خود را درست کنید. این یعنی چی حالا! فرضاً میای حساب می کنی کاربرها هنگام ورود به سایت فقط 10 تا از این ستون ها را استفاده می کنند! موقعی لاگین کردن به اکانتش از 20 تا و وقتی وارد یه بخش از سایت شدن از 30 تا همزمان استفاده می کنند. خوب حالا با خودت حساب می کنی فرضاً 100 درصد کاربرها به صفحه اصلی سایت سر می زنند پس 10 تا ستون رو نگه می دارم. و از این 100 درصد 80 درصد هم لاگین می کنند خوب میام می بینیم پس می توانم در این جدول 20 تا نگه دارم اما فقط 5 درصد از کاربرها به اون ناحیه خاص می رن و سالی یه بار! پس در نتیجه آن 10 تا را جدا می کنم. و می گذارم هر وقت وارد آن ناحیه شدند این جدول سلکت شود.
حالا یه بحث دیگه هم که باید مد نظر بگیری اینه که ممکن این 20 تا هم جدا شوند! چون بعضی از چیزها نیاز به موتورهای مختلف دیتابیس دارند فرضاً بعضی از ستون ها به MyISAM نیاز دارند و بعضی به InnoDB پس این ها هم باید در دسته مختلف قرار بگیرند.
دوست عزیز این مطالب رو از روی تجربه شخصی می گی یا رفرنسی داری؟

tehro0n
چهارشنبه 28 تیر 1391, 12:00 عصر
مطمئنید تا 3000 ستون یا فیلد؟
من رکورد رو نگفتما! این را برای این گفتم چون برای حذف و یا درج در phpMyAdmin تو localhost برای همین 70 ستون هم بعضی وقت ها با اررور مواجه میشم، حالا اگه بشه 3000 تا که دیگه صفحه بندی هم نداره و تا صبح برای ادیت دستی باید اسکرول رو کشید سمت راست :دی

mbf5923
چهارشنبه 28 تیر 1391, 21:46 عصر
دوست عزیز شما در یک جدول mysql میتونید 4096 ستون ایجاد کنید اما خوب طبیعی هستش که منجر به افت سرعت میشه
در ضمن باید در نظر داشته باشید حجم اطلاعاتی که در یک سطر میتونید ذخیره کنید نباید بیش از 65.535 کیلوبایت باشه
مثلا فرض کنید شما فیلدهاتون از نوع کارکتر 255 حرفی و همه utf8 باشن با این حساب نهایتا شما میتونید 85 ستون داشته باشید چرا که هر کارکتر در کدگذاری utf8 سه بایت اشغال میکنه و این یعنی 85*255*3 که برابر میشه با 65025 بایت