با عرض سلام و خسته نباشید خدمت همه دوستان عزیز
من برای سایتم تعداد خیلی زیادی جداول در دیتابیس دارم، که اکثر این جداول (شامل جدول کاربران، سفارشات، پیامها، تیکت و ...) همشون چندین ستون دارند که وضعیت را ثبت میکنند جهت استفاده های بعدی؛ مقادیری که در این ستونها ذخیره میشه تنها یک کاراکتر هست یا بصورت عدد یا بصورت حروف، اما تنها یک کاراکتر دارد. بطور مثال به این شکل:
حالت اول بصورت عددی با نوع tinyInt با میزان 1 => ستون وضعیت: مقدار 0 = غیرفعال / مقدار 1 = فعال / مقدار 2 = در انتظار بررسی / مقدار 3 = در حال بررسی
حالت دوم بصورت مقداری با نوع varchar با میزان 1 => ستون وضعیت: مقدار n = غیرفعال / مقدار a = فعال / مقدار p = در انتظار بررسی / مقدار c = در حال بررسی
چون سیستم این موارد را دریافت و پردازش میکند و قرار نیست اطلاعات به کاربر نمایش داده شود، به همین دلیل فرقی نداره از نظر کاربردی که بصورت عددی باشد یا حروفی؛
سوال من این هست که کدام مورد برای ذخیره این قبیل اطلاعات بهتر و بهینه تر هست ؟
مقدار را بصورت عددی در دیتابیس ذخیره کنیم یا بصورت حروفی در فیلد varchar
کدام مورد در حجم بالا (حدوداً دو تا 10 میلیون رکورد در هر جدول) حجم دیتابیس را کمتر افزایش میدهد و استاندارد تر هست ؟
سلام
استراتژی های متفاوتی در رابطه با پاسخ سوال شما وجود دارد!
البته شما عنوان نکردی که از چه دیتابیسی استفاده می کنی ولی اگر از Sql Server یا Oracle استفاده می کنی مقدار 2 تا 10 میلیون رکورد چیزی شبیه به بازی برا این دو تا دیتابیس است!. منظور از حجم بالا در این دو دیتابیس معمولا صحبت از حدود 10 میلیارد رکورد در هر join می باشد.
ولی اگر برایت سرعت ایندکس شدن دیتاها مهم است از int استفاده کن
با سلام، ممنونم از پاسخ شما
بنده از sql استفاده میکنم بصورت php mysqli اطلاعات را دریافت میکنم، در رابطه با حجم بالا بله شما درست میفرمایید اما در حال حاضر من توی همین چند میلیون هم ماندم ...
در حال حاضر روش بهتر و استاندارد تر برای ذخیره اطلاعات برای من مهم بود و میخواستم بدونم بهترین روش کدام مورد هست برای ذخیره این چنین اطلاعاتی
چون به مرور حجم اطلاعات بالا میرود و حجم کلی دیتابیس خیلی زیاد میشود چون حدود 100 جدول در دیتابیس وجود دارد و تمام این موارد بصورت تقریبی حجمشون رو به افزایش هست و بصورت دائم اطلاعات جدید به اونها اضافه میشود به همین دلیل میخواستم بدونم از نظر حجم دیتابیس و سرعت پردازش در زمان جستجو یا ... کدام مورد بهتر هست
سلام مجدد
mySql به هیچ وجه دیتابیس مناسبی برای ذخیره سازی داده های عظیم نیست.
از طرفی شما فرمودید که تعداد جداول پروژه تون زیاده! زیاد بودن جداول به شرط بهینه بودن، چیز بدی نیست مهم اینه که موقع Join زدن، باید ببینید به چند تا جدول بطور همزمان نیاز دارید.
توصیه ی برادرانه دارم هر چه زودتر از mySql به Sql Server یا Oracle مهاجرت فرمایید.
ممنونم بابت راهنمایی های شما، تقریباً میشه گفت به ندرت پیش اومده که join نیاز بشه بر روی این دیتابیس
:(
مگه mysql خوب نیست ؟
کلی وقت گذاشتم تا بتونم تا حد متوسط تسلط پیدا کنم و همه چیو بر اساس mysql نوشتم
چطور باید انتقال بدم؟ کدام مورد بهتر و آسان تر هست؟ آموزش هاش رو کجا میتونم پیدا کنم ؟
سلام دوست عزیز.
مطمئنا سرعت Select مقادیر عددی بیشتر از سرعت Select مقادیر رشته ای (varchar) می باشد. پس عدد انتخاب کردنتون بصرفه تره, همانطور که دوستمون آقای قاسمی هم اشاره کرده اند.
نکته دوم اینکه زیاد بودن تعداد جداول ملاک بر پایین آمدن سرعت دیتابیس نیست, چون در لحظه با همه جداول که ارتباط برقرار نمیکنیم و بسته به Select و Join و Union شما بستگی دارد که از چند جدول در یک کوئری استفاده بکنید.
در یکی از پاسخ هاتون به آقای قاسمی نوشته اید: "درحال حاضر من توی همین چند میلیون هم مانده ام ..." . چرا؟؟
مگر یک Select ساده چقدر زمان میخواد که شما عاجز موندید؟
سلام جناب نصیری
متشکرم بابت توضیحات و راهنمایی هاتون
بله امروز شروع کردم به ویرایش از حالت varchar به tinyint و تغییر مقادیر و سورس
در رابطه با سرعت، منظورم join جداول نبود در هنگام Select چون در کل میشه گفت اصلاً join استفاده نشده (به تعداد بسیار بسیار محدود اون هم فقط دو جدول با هم در موارد نادر انجام شده چون تا حدی میشه گفت جداول با هم بی ارتباط هستند و هر جدول کلیه اطلاعات بخش مربوطه را در خودش ذخیره میکنم) منظورم از سرعت بالا رفتن حجم کلی دیتابیس هست
من بی تجربه هستم و نمیدونم یک دیتابیس تا چه حجمی باشد منطقی هست و از چه حجمی بالاتر نامناسب هست
اما چون رکوردهای جداول رو به افزایش هست و مسلماً حجم روز به روز بیشتر میشود
الان یکی از جداول که 6 میلیون رکورد دارد هر دستور select که یک رکورد را دریافت کند نه اطلاعات کلی، حدوداً 1 ثانیه طول میکشد و این مقدار مهم نیست چون بسیار کم هست اما زمانیکه یک رکورد میخواهد update شود حدود 2 الی 3 ثانیه زمان میبرد و این مورد مشکل ساز شده؛ حالا اگر رکوردها چند برابر بشه مثلاً بشه 30 میلیون رکورد فکر کنم حدود 10 ثانیه طول بکشه
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)