![]() |
![]() ![]() |
![]() |
![]() ![]()
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 |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
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. 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). |
|
|
![]() ![]()
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,... |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
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). 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. |
|
|
![]() ![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 96 Pomógł: 0 Dołączył: 11.09.2006 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]()
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 |
|
|
![]() ![]()
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 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 6 Dołączył: 24.07.2007 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 05:19 |