Sokan Academy

MySQL دومین سیستم مدیریت پایگاه داده رابطه ای متن باز محبوب در جهان است. این محبوبیت که باعث شده در سراسر جهان از این سیستم مدیریت پایگاه داده استفاده شود به دلیل عملکرد همواره سریع، قابلیت اطمینان بالا و سهولت در استفاده است. در این مقاله می خواهیم به برخی از best practice های MySQL بپردازیم.

   1. همیشه از DataType مناسب استفاده کنید.

یکی از مهمترین best practice های MySQL، استفاده از نوع داده ها (Datatypes) بر اساس ماهیت داده ها است. استفاده از نوع داده های نامناسب ممکن است فضای بیشتری مصرف کرده یا خطایی را به وجود آورد.

به عنوان مثال: استفاده از Varchar(20) به جای نوع داده ی DateTime  برای ذخیره سازی مقادیر زمان، به اشتباهات محاسبات مربوط به زمان منجر می شود. همچنین ممکن است داده های نامعتبری ذخیره شوند.

   2. استفاده از CHAR(1) به جای VARCHAR(1)

VARCHAR(1) فضای بیشتری را برای ذخیره اطلاعات اشغال می کند، بنابراین اگر شما می خواهید یک کارکتر رشته ای را ذخیره کنید بهتر است از CHAR(1) استفاده کنید.

   3. برای ذخیره ی داده هایی با طول ثابت از نوع داده ی CHAR استفاده کنید.

به عنوان مثال: اگر طول داده ها کمتر از 1000 باشد، با استفاده از CHAR(1000) به جای VARCHAR(1000) فضای کمتری مصرف می شود.

   4. استفاده نکردن از فرمت های تاریخ منطقه ای.

هنگام استفاده از نوع داده ی DATETIME و DATE، همیشه از فرمت تاریخ YYYY-MM-DD یا فرمت تاریخ ISO مناسب برای موتور SQL خود استفاده کنید. فرمت های منطقه ای مانند DD-MM-YYYY یا MM-DD-YYYY به درستی ذخیره نمی شوند.

   5. Index کردن ستون های کلید.

خوب است که نتیجه ی query های ما با سرعت بیشتری بازگردانده شوند، بنابراین مطمئن شوید که ستون هایی که در JOIN ها استفاده می شود index شده باشند.

   6. از تابع ها بر روی ستون های index شده استفاده نکنید.

به عنوان مثال، فرض کنید شما می خواهید اطلاعاتی را دریافت کنید که در آن سه کارکتر اول ستون نام مشتری `علی` باشد. استفاده از query زیر باعث می شود index ستون مورد استفاده قرار نگیرد.

SELECT * FROM customers WHERE left (customer_name,3)=’علی’

بهتر است به جای استفاده از تابع LEFT از query زیر استفاده کنیم.

SELECT * FROM customers WHERE customer_name like ‘علی%’

7. از *SELECT  فقط در زمان نیاز استفاده کنید.

اگر جدول شما ستون های زیادی داشته باشد،  * SELECT همه ستون ها را باز می گرداند. این کار زمان پاسخ آهسته تر می کند، به ویژه اگر شما نتیجه را برای یک برنامه  front-end ارسال کنید.

در عوض، به صراحت نام ستون هایی که مورد نیازتان است را بنویسید.

   7. فقط زمانی که نیاز دارید از ORDER BY استفاده کنید.

استفاده از این تابع، ممکن است زمان پاسخ دهی در محیط چند کاربره را بیشتر کند.

   8. برای بررسی وجود یک داده از EXISTS استفاده کنید.

        برای بررسی وجود یک داده از 

If EXISTS(SELECT * from Table WHERE col=’some value’)

به جای 

If (SELECT count(*) from Table WHERE col=’some value’)>0

          استفاده کنید.

   9. Query های select خود را EXPLAIN کنید.

اگر از کلمه کلیدی EXPLAIN استفاده کنید، می توانید بینشی در مورد آنچه MySQL برای اجرای query شما انجام می دهد دریافت کنید. این کار می تواند به شما کمک کند تا شما مشکلات query یا ساختار جدول های خود را بفهمید.

EXPLAIN گرفتن از query نشان می دهد که در query شما کدام شاخص ها مورد استفاده قرار می گیرند، چگونه جدول اسکن می شود، چگونه داده ها مرتب می شوند و غیره.

برای انجام این کار کافی است عبارت EXPLAIN را پیش از query خود بنویسید. اگر این کار را در phpMyAdmin انجام دهید نتیجه را در یک جدول مرتب و خوب به شما نشان خواهد داد.

   10. وقتی فقط یک ردیف را میخواهید حتما از LIMIT 1 استفاده کنید.

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

در چنین مواردی، شما می خواهید از تابع limit برای افزایش کارایی استفاده کنید. 

با استفاده از این تابع موتور پایگاه داده دیگر به سراغ کل جدول یا INDEX ها نمی رود و اولین داده ای که پیدا کند را به عنوان خروجی قرار می دهد. به عنوان مثال به جای استفاده از

SELECT * FROM user WHERE state = ‘Alabama'

          از query زیر استفاده کنید:

SELECT * FROM user WHERE state = ‘Alabama’ LIMIT 1

   11. استفاده از index ها و ستون های مشابه برای join ها

برای join کردن تو جدول سعی کنید از ستون هایی استفاده کنید که index شده اند این کار بر بهینه سازی داخلی عملیات join در MYSQL تاثیر گذار است. 

همچنین ستون های مورد استفاده باید از یک نوع داده باشند. به عنوان مثال، اگر شما بخواهید دو جدول را با استفاده از یک ستون DECIMAL و یک ستون INT با هم join کنید، MYSQL نمی تواند از index های موجود استفاده کند.

   12. کش (cache) کردن query ها

کش کردن query ها یکی از موثرترین روش های بهبود عملکرد است. اکثر سرورهای MYSQL آن را به طور پیش فرض فعال کرده اند. MYSQL متن بیانیه ی (statement) SELECT را همراه با نتیجه ی مربوط به آن برای کش یک query ذخیره می کند. اگر سرور بعدا یک بیانیه یکسان را دریافت کند، نتیجه را به جای تجزیه و اجرای این بیانیه از کش بازیابی می کند. کش query ها در session ها به اشتراک گذاشته می شوند، بنابراین یک نتیجه تولید شده توسط یک کاربر می تواند در پاسخ به همان query درخواست شده توسط یک کاربر دیگر ارسال شود.

 

 

 

این محتوا آموزنده بود؟
کوئریquerysqlmysqldatabaseدیتابیسپایگاه داده

sokan-academy-footer-logo
کلیه حقوق مادی و معنوی این وب‌سایت متعلق به سکان آکادمی می باشد.