PDA

View Full Version : سوال: کدام مورد جهت ذخیره سازی اطلاعات در دیتابیس بهتر و بهینه تر هست؟



hgfhjgjh
دوشنبه 22 بهمن 1397, 14:20 عصر
با عرض سلام و خسته نباشید خدمت همه دوستان عزیز

من برای سایتم تعداد خیلی زیادی جداول در دیتابیس دارم، که اکثر این جداول (شامل جدول کاربران، سفارشات، پیام‌ها، تیکت و ...) همشون چندین ستون دارند که وضعیت را ثبت میکنند جهت استفاده های بعدی؛ مقادیری که در این ستونها ذخیره میشه تنها یک کاراکتر هست یا بصورت عدد یا بصورت حروف، اما تنها یک کاراکتر دارد. بطور مثال به این شکل:
حالت اول بصورت عددی با نوع tinyInt با میزان 1 => ستون وضعیت: مقدار 0 = غیرفعال / مقدار 1 = فعال / مقدار 2 = در انتظار بررسی / مقدار 3 = در حال بررسی
حالت دوم بصورت مقداری با نوع varchar با میزان 1 => ستون وضعیت: مقدار n = غیرفعال / مقدار a = فعال / مقدار p = در انتظار بررسی / مقدار c = در حال بررسی
چون سیستم این موارد را دریافت و پردازش میکند و قرار نیست اطلاعات به کاربر نمایش داده شود، به همین دلیل فرقی نداره از نظر کاربردی که بصورت عددی باشد یا حروفی؛

سوال من این هست که کدام مورد برای ذخیره این قبیل اطلاعات بهتر و بهینه تر هست ؟
مقدار را بصورت عددی در دیتابیس ذخیره کنیم یا بصورت حروفی در فیلد varchar
کدام مورد در حجم بالا (حدوداً دو تا 10 میلیون رکورد در هر جدول) حجم دیتابیس را کمتر افزایش میدهد و استاندارد تر هست ؟

plague
دوشنبه 22 بهمن 1397, 16:05 عصر
int یا بهتر بگم tinyint فضای کمتری میگیره و بهینه تر هستش از نظر سرعت
ولی varchar خوانایی بالاتری داره و سریعتر میشه درکش کرد و نیاز نیست به یاد بسپاری چیزی رو

شخصا از enum استفاده میکنم برای فیلد های فلگ که بیش از 2 حالت دارن و bool برای فیلد هایی که 2 حالت دارن

hgfhjgjh
سه شنبه 23 بهمن 1397, 07:24 صبح
int یا بهتر بگم tinyint فضای کمتری میگیره و بهینه تر هستش از نظر سرعت
ولی varchar خوانایی بالاتری داره و سریعتر میشه درکش کرد و نیاز نیست به یاد بسپاری چیزی رو
شخصا از enum استفاده میکنم برای فیلد های فلگ که بیش از 2 حالت دارن و bool برای فیلد هایی که 2 حالت دارن

واقعاً از شما متشکرم دوست عزیز؛ boolean مناسب نیست چون در هر صورت بیش از دو حالت دارم؛ و با توجه به توضیحات شما و اینکه نیازی به حفظ کردن و به یاد سپاری این موارد نیست و تنها یک مرتبه تعریف میشوند و پس از اون خود سورس پردازش را انجام میدهد و در آینده هم نیازی به ارتقاء یا آپدیت ندارد، بنابراین همون tinyint بسیار مناسب هست؛ ممنونم از شما

isaac23
سه شنبه 23 بهمن 1397, 08:27 صبح
همون نوع فیلد tinyint بهتر است یه بایت هم بیشتر نمیگیره و سرعت خیلی خوبی هم داره . از 0 تا 255 هم میگیره پس مشکلی نداری اگه همین کارت رو راه میندازه.

plague
سه شنبه 23 بهمن 1397, 18:03 عصر
البته bool عملا همون tinyint هستش و فرقی چندانی از نظر ساختار ندارن چون Mysql مفهوم false , true نداره
مزیتش نام bool هست که برای آدم های وسواسی مثل من مناسبه که فلگ های 2 حالته رو نشون بده