Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Zakładanie indexów...
Forum PHP.pl > Forum > Bazy danych > MySQL
Sokrates
Witam,
Mam pytanie odnośnie zakładania indexów.

Czy do tworzenia indexów bierze się tylko wartości z warunku WHERE czy może też z ORDER BY , GROUP BY?
Jak wygląda sytuacja jak tabele są łączone LEFT JOIN czy warunki łączenia też uwzględnia się w indexach?

Czy pole które jest kluczem podstawowym w tabeli jest od razu indexowane,
czy może trzeba na nie dodatkowo zakładać indexy?

Co z wartościami które są sprawdzane z innymi komórkami tej samej tabeli,
np.: '...WHERE columna1 > columna2...'
Czy muszę założyć index na columne1 i columne2, czy wystarczy tylko index na columne1 ?

Czy jest jakaś wartość określona ile takich indexów można założyć na tabeli ?

Dzięki za odpowiedzi,
Pozdrawiam.
phpion
Cytat(Sokrates @ 31.01.2009, 18:50:00 ) *
Czy do tworzenia indexów bierze się tylko wartości z warunku WHERE czy może też z ORDER BY , GROUP BY?
Jak wygląda sytuacja jak tabele są łączone LEFT JOIN czy warunki łączenia też uwzględnia się w indexach?

Na wszystkie pytania: TAK, przy każdej z tych operacji mogą zostać użyte indeksy.

Cytat(Sokrates @ 31.01.2009, 18:50:00 ) *
Czy jest jakaś wartość określona ile takich indexów można założyć na tabeli ?

Konkretnej wartości nie ma. Przesadna liczba indeksów wpłynie negatywnie na bazę (spowolni wstawianie/aktualizację/usuwanie rekordów, niepotrzebnie będzie zajmowane więcej miejsca).
Sokrates
Chyba odpowiedziałeś w trakcie edytowanie prze ze mnie postu.
A znasz może odpowiedz na te pytania?

Czy pole które jest kluczem podstawowym w tabeli jest od razu indexowane,
czy może trzeba na nie dodatkowo zakładać indexy?

Co z wartościami które są sprawdzane z innymi komórkami tej samej tabeli,
np.: '...WHERE columna1 > columna2...'
Czy muszę założyć index na columne1 i columne2, czy wystarczy tylko index na columne1 ?

Dzięki za odpowiedz,...
phpion
Cytat(Sokrates @ 31.01.2009, 19:11:44 ) *
Czy pole które jest kluczem podstawowym w tabeli jest od razu indexowane,
czy może trzeba na nie dodatkowo zakładać indexy?

Tak, pole (pola) z oznaczone jako klucz główny automatycznie posiada indeks (na dodatek unikalny). Nie ma potrzeby zakładania dodatkowego indeksu na takie pole (phpMyAdmin wywala wręcz ostrzeżenie).

Cytat(Sokrates @ 31.01.2009, 19:11:44 ) *
Co z wartościami które są sprawdzane z innymi komórkami tej samej tabeli,
np.: '...WHERE columna1 > columna2...'
Czy muszę założyć index na columne1 i columne2, czy wystarczy tylko index na columne1 ?

Na to pytanie niestety nie udzielę Ci informacji. Stwórz sobie tabelę testową i wykonaj EXPLAIN SELECT... i zobacz co się pojawi przy założonych i przy braku indeksów.
Sokrates
Cytat(phpion @ 31.01.2009, 17:15:19 ) *
Na to pytanie niestety nie udzielę Ci informacji. Stwórz sobie tabelę testową i wykonaj EXPLAIN SELECT... i zobacz co się pojawi przy założonych i przy braku indeksów.


A czy możesz wyjaśnić mi choć tak z grubsza co mówią poszczególne kolumny?

zapytanie SQL: EXPLAIN SELECT R.reviews_id AS id, R.reviews_name AS name, C.category_name AS category FROM videotesty_users_reviews R LEFT JOIN videotesty_category C ON ( C.category_id = R.reviews_category_id ) WHERE R.reviews_active = '1' ORDER BY R.reviews_estimate_vt DESC, R.reviews_display DESC LIMIT 0 , 10;

Rekordów: 2

id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
1 | SIMPLE | R | ALL | NULL | NULL | NULL | NULL | 5 | Using where; Using filesort
1 | SIMPLE | C | eq_ref | PRIMARY | PRIMARY | 4 | videotesty-test.R.reviews_category_id | 1
phpion
Tutaj masz dokładny opis:
http://dev.mysql.com/doc/refman/5.0/en/using-explain.html
Sokrates
Oki, dzięki...
:-)

Mam jeszcze pytanie które narodziło mi się podczas tworzenia indexów.

Jaka jest różnica w działaniu i funkcjonowaniu indexów jak pozakładam je tak:
INDEX1 (columna1,columna2,columna3,columna4)
albo tak:
INDEX1 (columna1)
INDEX1 (columna2)
INDEX1 (columna3)
INDEX1 (columna4)

Czy jest jakaś możliwość aby mysql przeliczył jeszcze raz 'moc' indexów?

Dzięki za odpowiedz,...
bazyliszek83
Cytat(Sokrates @ 1.02.2009, 21:12:18 ) *
...

Czy jest jakaś możliwość aby mysql przeliczył jeszcze raz 'moc' indexów?

Dzięki za odpowiedz,...

  1. OPTIMIZE TABLE 'nazwa_tabeli' ;
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.