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

طراحی پایگاه داده با احتیاط

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

به عنوان مثال، افراد زیادی اطلاعات مشتری ،اطلاعات پرداخت را در ستون (column) یک پایگاه داده ذخیره می کنند. برای هر دوی سیستم پایگاه داده و توسعه دهندگان که بر روی آن کار می کنند ، این مورد خوبی نیست.

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

آنچه شما باید بهینه سازی کنید

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

EXPLAIN SELECT * FROM ref_table,other_table WHERE ref_table.key_column=other_table.column;

سریعترین کوئری ... آیا ارسال می کنید

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

راه حل های بسیاری برای پیاده سازی یک کش کوئری بر روی سرور شما وجود دارد. که چند نمونه از آنها عبارتند از:

AdoDB: AdoDB یک کتابخانه انتزاعی پایگاه داده برای پی اچ پی است. این اجازه را می دهد تا شما به استفاده از سیستم پایگاه داده انتخابی (MySQL ،PostgreSQL، Interbase و....) بپردازید و همچنین برای سرعت بیشتر طراحی شده است. AdoDB یک سیستم ذخیره ساده اما قدرتمند را برای شما فراهم می کند. و آخرین اما نه کم، AdoDB تحت BSD می باشد، که بدان معنی است که شما می توانید آزادانه در پروژه های خود استفاده کنید.مجوز LGPL نیز برای پروژه های تجاری امکان پذیر می باشد.

Memcached - ممکشد: ممکشد سیستم ذخیره سازی حافظه توزیع شده است که اغلب مورد استفاده برای سرعت بخشیدن به پایگاه داده پویا با استفاده از کاهش بار پایگاه داده است.

CSQL کش: CSQL کش منبع باز و زیرساخت های ذخیره داده است. هرگز آن را به تنهایی مورد آزمایش قرار ندهید، اما به نظر می رسد یک ابزار فوق العاده است.

آنچه که نیاز نیست انتخاب نکنید

یک راه بسیار معمول برای دریافت اطلاعات مورد نظر استفاده از نماد * می باشد، که تمام فیلدهای جدول مورد نظر را برای ما انتخاب می کند:

SELECT * FROM besta_posts;

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

SELECT title, excerpt, author FROM besta_posts;

استفاده از LIMIT

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

بدون استفاده از LIMIT، اگر جدول شما دارای 100،000 رکورد مختلف باشد، شما همه آنها را استخراج می کنید که یک کار غیر ضروری برای سرور می باشد.

SELECT title, excerpt, author FROM besta_posts LIMIT 10;

اجتناب از کوئری در حلقه

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

در این مثال مشکل "کوئری در حلقه" را می بینیم:

foreach ($display_order as $id => $ordinal) {
$sql = "UPDATE categories SET display_order = $ordinal WHERE id = $id";
mysql_query($sql);
}

در مثال زیر جایگزین روش بالا ذکر شده است :

UPDATE categories
SET display_order = CASE id
WHEN 1 THEN 3
WHEN 2 THEN 4
WHEN 3 THEN 5
END
WHERE id IN (1,2,3)

استفاده ازjoin بجای subquery ها :

به عنوان یک برنامه نویس، subquery ها چیزی است که شما را میتواند وسوسه برای استفاده و سوء استفاده کند. subquery ها، به شکل زیر، می تواند بسیار مفید باشد:

SELECT a.id,
(SELECT MAX(created)
FROM posts
WHERE author_id = a.id)
AS latest_post FROM authors a

اگر چه subquery ها مفید هستند، آنها اغلب می تواند به جای join استفاده شوند، که قطعا سریع تر اجرا می شوند .

SELECT a.id, MAX(p.created) AS latest_post FROM authors a INNER JOIN posts p ON (a.id = p.author_id) GROUP BY a.id

در هنگام استفاده از wildcard مراقب باشید

wildcard بسیار مفید است زیرا آنها می توانند برای یک یا چند کاراکتر در هنگام جستجو برای داده ها در پایگاه داده استفاده شوند. من ادعا نمی کنم که شما باید آنها را استفاده نکنید، اما در عوض، شما باید آنها را با احتیاط استفاده کنید و استفاده از wildcard کامل نیاز نیست زمانی که پیشوند یا پسوند wildcard می تواند کار مشابه انجام دهد.

در واقع، انجام یک جستجوی کامل wildcard در یک میلیون رکورد قطعا پایگاه داده را به کشتن خواهد داد.

#Full wildcard
SELECT * FROM TABLE WHERE COLUMN LIKE '%hello%';
#Postfix wildcard
SELECT * FROM TABLE WHERE COLUMN LIKE 'hello%';
#Prefix wildcard
SELECT * FROM TABLE WHERE COLUMN LIKE '%hello';

استفاده از UNION به جای OR

مثال زیر با استفاده از OR برای به دست آوردن نتیجه می باشد:

SELECT * FROM a, b WHERE a.p = b.q or a.x = b.y;

UNION اجازه می دهد تا شما به ترکیب مجموعه ای از نتایج از 2 یا بیشتر را انتخاب کنید. در مثال زیر همان نتیجه باز خواهد گشت که کوئری بالا نمایش می دهد، اما سریع تر خواهد بود:

SELECT * FROM a, b WHERE a.p = b.q
UNION
SELECT * FROM a, b WHERE a.x = b.y

استفاده از indexes

indexes اطلاعات شبیه به چیزی است که شما می توانید در کتابخانه پیدا کنید: اجازه می دهد که پایگاه داده برای پیدا کردن اطلاعات درخواستی سریعتر عمل کند، درست مانند یک شاخص کتابخانه اجازه خواهد داد که یک خواننده برای پیدا کردن آنچه که می خواهد بپردازد، بدون از دست رفتن زمان.

Index می تواند بر روی یک ستون منفرد و یا ترکیبی از ستون در یک جدول پایگاه داده ایجاد شود. جدول Index ساختار پایگاه داده ای است که مرتب ارزش های یک یا چند ستون در یک جدول پایگاه داده به منظور درخواستی خاص استفاده می شود.

کوئری زیرایجاد یک Index در ستون مدل از جدول محصولات به وجود می آورد. Index همچنان idx Model فراخوانی می شود :

CREATE INDEX idxModel ON Product (Model);

گروه طراحی سایت بستا مفتخر است شما را در طراحی سایت به صورت استاندارد در تمامی مراحل از پیاده سازی تا اجرا همراهی نماید