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');