نوشته شده توسط
hgfhjgjh
با عرض سلام و خسته نباشید خدمت اساتید گرامی، من یک صفحه دارم که شامل دو بخش و یک دیتابیس هست و با php و mysqli کار میکنم؛ در این سیستم یک دیتابیس سنگین دارم که تا الان حدود 2 میلیارد رکورد در اون ذخیره شده که شامل پنج ستون هست که به شکل زیر هستند:
1- فیلد عددی int(10) بصورت Primary و AUTO_INCREMENT و unsigned که یک شناسه عددی به هر رکورد جدید داده میشه بصورت افزایشی خودکار
2- فیلد عددی int(10) بصورت unsigned که زمان یونیکس 10 رقمی که خروجی تابع time() هست در اون ذخیره میشه و زمان ثبت یا آخرین آپدیت رکورد هست
3- فیلد عددی int(10) بصورت unsigned که در اون تعداد مرتبهای که رکورد فراخوانی شده رو ثبت میکنم و به ازای هر مرتبه که اون رکورد فراخوانی بشه یک عدد بهش اضافه میشه
4- فیلد char (39) که یک رشته ترکیبی از حروف و عدد هست که غیر تکراری هست برای هر رکورد و این ستون بصورت index تعریف شده که مبنای جستجوی مقادیر هست برای کاری که انجام میدم
5- فیلد varchar (13) که یک مقدار آزاد از 4 تا 13 کاراکتر رو تشکیل میده
ستون چهارم مقدار hash شده متن موجود در ستون پنجم هست؛ نحوه عملکرد این سیستم به این شکل هست که دو بخش اصلی داریم یکی جستجو و یکی درج مقدار جدید؛ عبارت 39 کاراکتری جستجو میشه و اگر در دیتابیس وجود داشت، مقدار ستون پنجم اون رکورد نمایش داده میشه و در ستون سوم یک عدد به تعداد مرتبه فراخوانی اضافه شده و در ستون دوم زمان همون لحظه ثبت میشه؛ بخش دیگر این سیستم درج مقادیر جدید هست که یک متن دلخواه 4 تا 13 کاراکتری دریافت میشه و hash میشه به 39 کاراکتر و در نهایت در دیتابیس ذخیره میشه.
جهت درک بهتر تناسب اضافه شدن رکورد جدید به خواندن اطلاعات، این تناسب به صورت یک به 25 هست. مثلاً بطور میانگین در هر دقیقه 1 رکورد جدید به سیستم اضافه میشه و 25 رکورد هم در همان یک دقیقه جستجو میشه. قبلاً سرعت دیتابیس بسیار بالاتر بود اما الان مطلوب نیست و تمایل دارم دیتابیس را بهینه تر کنم.
سوال اول: آیا تعریف نوع ستونها مناسب هست بر اساس کاری که انجام میشه ؟
سوال دوم: با توجه به اینکه ستون اصلی من ستون چهارم char (39) هست، آیا کار درستی هست که اون رو index کردم؟
سوال سوم: آیا اینکه یک ستون primary و یک ستون index دارم باعث کند شدن دیتابیس میشه یا برعکس باعث بهبود سرعت میشه؟
سوال چهارم: با توجه به توضیحات بالا موتور myisam که فعال هست مناسب هست یا باید اون رو به innodb تغییر بدم ؟