Əsas səhifə > MySQL administration > MySQL table optimization

MySQL table optimization

Əgər şikayət gəlirsə ki, `mənim sorğum zəif gedir` dərhal o sorğunu optimize etməyə çalışmaq beynəlxalq təcrübədə dəhşətli dərəcədə rədd edilir.
MySQL optimization ümumi olaraq 3 hissəyə
1. Server optimization
2. Schema\table optimization
3. Query optimization

Göstərildiyi kimi yuxarıdan aşağıya getdiyimiz halda nəzərə çarpacaq dərəcədə uğur əldə edə bilərik.

Table optimization üçün əsas olaraq:
ANALYZE TABLEOPTIMIZE TABLE istifadə olunur.
Hər iki komanda cədvəllər üçün vaxtaşırı istifadə olunmalıdır. Yəni 1 dəfə istifadə olundu vəssalamla olmur malesef.

1.ANALYZE TABLE
Deyək ki sizin 2 cədvəliniz var və bu cədvələ tez-tez insert-lər olunur, index-lər əlavə olunur drop olunur və.s
From documentation:
ANALYZE TABLE analyzes and stores the key distribution for a table
MySQL uses the stored key distribution to decide the order in which tables should be joined when you perform a join on something other than a constant. In addition, key distributions can be used when deciding which indexes to use for a specific table within a query.

Dokumentasiyadan belə aydın olur ki, qısa olaraq ANALYZE TABLE bizim join-lərimizi və index lookup-larımızı sürətləndirir. Əyani misal. City və Country cədvəllərini join edirik:

mysql> select country.name,group_concat(city.name) from country,city where country.code=city.countrycode group by country.name;
.
.
.
232 rows in set, 8 warnings (0.14 sec)

Vaxt 0.14 sec

ANALYZE TABLE-ın effektini nümayiş etdirmək üçün:

mysql> analyze table country,city;
+---------------+---------+----------+----------+
| Table         | Op      | Msg_type | Msg_text |
+---------------+---------+----------+----------+
| world.country | analyze | status   | OK       |
| world.city    | analyze | status   | OK       |
+---------------+---------+----------+----------+
2 rows in set (0.12 sec)

Və eyni join-li sorğunu bir daha işlədirik:

mysql> select country.name,group_concat(city.name) from country,city where country.code=city.countrycode group by country.name;
.
.
.
232 rows in set, 8 warnings (0.01 sec)

Vaxt 0.01 sec
🙂 Fərq var elə deyil mi?

2.OPTIMIZE TABLE

From Documentation:
Reorganizes the physical storage of table data and associated index data, to reduce storage space and improve I/O efficiency when accessing the table. The exact changes made to each table depend on the storage engine used by that table.
The table and indexes are reorganized, and disk space can be reclaimed for use by the operating system.

Coxsaylı insert, update, delete və.s etdikdən sonra OPTIMIZE TABLE işlədilməsi cədvəli yenidən qurur,index-ləri yenidən qaydaya salınır, memory və yaddaşdakı boşluqlar və.s tənzimlənir. Qısası cədvəlimizə yeni nəfəs gəlir.

Sınayaq:

mysql> select * from sales;
.
.
.
2500004 rows in set (12.57 sec)

Vaxt: 12 dəqiqə 57 saniyə

OPTIMIZE TABLE:

mysql> optimize table sales;
+----------------+----------+----------+-------------------------------------------------------------------+
| Table          | Op       | Msg_type | Msg_text                                                          |
+----------------+----------+----------+-------------------------------------------------------------------+
| mysqlspp.sales | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| mysqlspp.sales | optimize | status   | OK                                                                |
+----------------+----------+----------+-------------------------------------------------------------------+
2 rows in set (1 min 54.30 sec)

Və yenidən:

mysql> select * from sales;
.
.
.
2500004 rows in set (9.41 sec)

Vaxt: 9 dəqiqə 41 saniyə

Yenə də böyük fərq hiss olundu🙂

Beynəlxalq məsləhət:
Ciddi şəkildə yüklənən və intensiv insert update delete olunan cədvəlləri ən azı həftədə 1 dəfə və yaxud intensiv select-lər gedirsə 3 gündən bir(select sürətinə təsir etmək məqsədilə) analyze və optimize etmək lazımdır.
Zəif işləyən (uzun çəkən) sorğuların optimizasiyasına server səviyyəsində başlamalı, daha sonra cədvəl və sorğunun özünə diqqəti cəlb etməli.

Bu və digər Table Maintenance komandalar haqqında daha ətraflı : Table Maintenance Statements

Təşəkkürlər🙂

  1. Hələlik heç bir şərh yoxdur
  1. No trackbacks yet.

Bir cavab yazın

Sistemə daxil olmaq üçün məlumatlarınızı daxil edin və ya ikonlardan birinə tıklayın:

WordPress.com Loqosu

WordPress.com hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Twitter rəsmi

Twitter hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Facebook fotosu

Facebook hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Google+ foto

Google+ hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

%s qoşulma

%d bloqqer bunu bəyənir: