sobota, 27 listopada 2010

Sprawdzanie struktury tabeli oraz kluczy głównych i obcych MySql, tworzennie index'ów

Często zdarza się, że strony wczytują się nad wyraz wolno.
Serwer na, którym jest umieszczona baza danych nie jest mocno obciążony (ani CPU ani pamięć), ale i tak strony wczytują się przez wieczność.
W takim przypadku możemy zainwestować w jeszcze mocniejszą maszynę z szybszymi dyskami twardymi, bez gwarancji, że to rozwiąże nasz problem lub zabrać się za optymalizację baz danych.

Zaczynamy od połączenia się z bazą danych:
mysql -u root -p

Po połączeniu sprawdzamy jakie bazy danych są dostępne:
show databases;


Wybieramy jedną z nich:
use nazwa_bazy;


Sprawdzamy jakie są w niej utworzone tabele:
show tables ;

Sprawdzamy jaka jest struktura tabeli:
describe nazwa_tabeli ;
mysql> describe role ;
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| rid | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(64) | NO | UNI | | |
+-------+------------------+------+-----+---------+----------------+
2 rows in set (0,00 sec)


Sprawdzamy jakie są klucze główne, klucze obce i index'y:
show index from nazwa_tabeli;
+--------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+--------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| system | 0 | PRIMARY | 1 | filename | A | 50 | NULL | NULL | | BTREE | |
| system | 1 | modules | 1 | type | A | NULL | 12 | NULL | | BTREE | |
| system | 1 | modules | 2 | status | A | NULL | NULL | NULL | | BTREE | |
| system | 1 | modules | 3 | weight | A | NULL | NULL | NULL | | BTREE | |
| system | 1 | modules | 4 | filename | A | NULL | NULL | NULL | | BTREE | |
| system | 1 | bootstrap | 1 | type | A | NULL | 12 | NULL | | BTREE | |
| system | 1 | bootstrap | 2 | status | A | NULL | NULL | NULL | | BTREE | |
| system | 1 | bootstrap | 3 | bootstrap | A | NULL | NULL | NULL | | BTREE | |
| system | 1 | bootstrap | 4 | weight | A | NULL | NULL | NULL | | BTREE | |
| system | 1 | bootstrap | 5 | filename | A | NULL | NULL | NULL | | BTREE | |
| system | 1 | type_name | 1 | type | A | NULL | 12 | NULL | | BTREE | |
| system | 1 | type_name | 2 | name | A | NULL | NULL | NULL | | BTREE | |
+--------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
12 rows in set (0,00 sec)

Teraz możemy przystąpić do analizy jakie zapytania generują największe obciążenie i stworzyć index na wybranych kolumnach w tabeli.
Index może składać się z jednej kolumny lub wielu kolumn.

Tworzymy przykładowy index:
create index nazwa_index'u on nazwa_tabeli (nazwa_kolumny);

Brak komentarzy:

Prześlij komentarz