mysql04.doc

(91 KB) Pobierz

Przyspieszenie szybkości wykonywania zapytań

 

 

Ile rekordow w tej tabelce?

 

count

 

select count(1) from duzatabelka;

 

 

sprawdzenie statusu tabel

 

show table status; --- wynik nie miesci się na ekranie

 

show table status\G;  ß- zmina zapisu wierszowego na zapis kolumnowy

 

 

Wyciągnij kilka początkowych rekordów!

 

10 losowych rekordow

select * from duzatabelka

limit 10;

 

 

Ile jest tutaj rekordów, których cena > 10000 i <30000

 

select count(1) from duzatabelka

where cena >10000 and cena<30000;

 

 

Wielokrotne wykonywanie tego samego zapytania sprawia ze

wynik tego zapytania trafia do cache.

 

My jak optymalizujemy nie możemy sobie na to pozwolic zatem:

 

select sql_no_cache count(1) from duzatabelka

where cena >10000 and cena<30000;

 

musimy przeksztalcic structure danych….

 

show create table duzatabelka;

 

 

Indexy:

 

Mamy książkę telefoniczną.

 

niealfabetycznie – dane bez indeksów

 

index zakładamy na to poczym wyszukujemy:

 

jeśli wyszukujemy po nazwiskach to index zakładam na nazwisko.

 

Jak w tej tabelce wyszukujemy po cenie to index musi zostać założony na cenie.

 

Zakładanie indexu:

 

create index poCenie on duzatabelka (cena);

 

zapytanei wywoluje sie znacznie szybciej.

 

select sql_no_cache count(1) from duzatabelka

where cena >10000 and cena<30000;

 

jak dokladnie wyglada to zapytanie?

Wyjaśnij mi to zapytanie:

 

 

explain select sql_no_cache count(1) from duzatabelka

where cena >10000 and cena<30000;

 

explain select sql_no_cache count(1) from duzatabelka

where cena >10000 and cena<30000\G;

 

 

Usune założony index:

 

drop index poCenie on duzatabelka;

explain select sql_no_cache count(1) from duzatabelka

where cena >10000 and cena<30000\G;

 

 

Wydajność zapytania bez indexu jest znacznie mniejsza.

 

10 losowych rekordow

select * from duzatabelka

limit 10;

 

 

 

 

 

select sql_no_cache count(1) from duzatabelka

where cena >10000 and cena<30000

and kod=’iegoojabee’;

 

tu jest wyszukiwanie po cena oraz kod

 

create index ok on duzatabelka

(cena, kod); ß- kolejność pól ma znaczenie!

 

Jeżeli kod byłby najpierw musiałbym odwrócić!

 

explain select sql_no_cache count(1) from duzatabelka

where cena >10000 and cena<30000

and kod=’iegoojabee’\G;

 

 

Jak wyszukujemy artykuły na podstawie słów kluczowych?

 

Select id from duzatabelka

Where opis like’%ipoiliev%’;

 

Jak szukam po polu opis:

 

create index poOpisie on duzatabelka(opis);

na pole typu text nie da rady założyć indenu!

 

wyszukiwanie full text!

 

Create fulltext index poOpisie on duzatabelka(opis);

 

Indexy fulltextowe to najszybsze z indexow!

 

Select sql_no_cache id from duzatabelka

Where opis like’%ipoiliev%’;

 

explain select sql_no_cache id from duzatabelka

Where opis like’%ipoiliev%’\G;

 

 

Nie mozna indexow fulltext tak odpytywac. sa specjalne polecenia do tego!

 

select sql_no_cache id from duzatabelka

Where match (opis) against(’ipoiliev);

 

Zgłoś jeśli naruszono regulamin