Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Zakładanie indexów...
Sokrates
post
Post #1





Grupa: Zarejestrowani
Postów: 96
Pomógł: 0
Dołączył: 11.09.2006
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Sokrates 31.01.2009, 17:00:40
Go to the top of the page
+Quote Post
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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).
Go to the top of the page
+Quote Post
Sokrates
post
Post #3





Grupa: Zarejestrowani
Postów: 96
Pomógł: 0
Dołączył: 11.09.2006
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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,...
Go to the top of the page
+Quote Post
phpion
post
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.
Go to the top of the page
+Quote Post
Sokrates
post
Post #5





Grupa: Zarejestrowani
Postów: 96
Pomógł: 0
Dołączył: 11.09.2006
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
phpion
post
Post #6





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Tutaj masz dokładny opis:
http://dev.mysql.com/doc/refman/5.0/en/using-explain.html
Go to the top of the page
+Quote Post
Sokrates
post
Post #7





Grupa: Zarejestrowani
Postów: 96
Pomógł: 0
Dołączył: 11.09.2006
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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,...

Ten post edytował Sokrates 1.02.2009, 21:27:56
Go to the top of the page
+Quote Post
bazyliszek83
post
Post #8





Grupa: Zarejestrowani
Postów: 81
Pomógł: 6
Dołączył: 24.07.2007
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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' ;
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 05:19