![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Hejka,
aż wstyd się przyznać ale do tej pory nie zaprzątałem sobie tym głowy i robiłem indexy na pojedyczne kolumny. Chciałbym się jednak dowiedzieć czy jest sens robienia czegoś takiego: Mam tabelę, w której są pola np. - login varchar - haslo varchar - aktywny enum("0", "1") Indexy stawiałem dla każdego z pól osobno. Jednak najczęściej tworzę zapytanie, w którym nie wybieram rekordu po 1 warunku (np. WHERE login="nanana") tylko 3 na raz (WHERE login="nanana" AND haslo="ooo" AND aktywny="1"). Czy w takim przypadku nie powinienem utworzyć również indexu: INDEX (login, haslo, aktywny) ? Jeśli tak to to by oznaczalo, że należy tworzyć indexy na wszystkie kombinacje danych? Pozdrawiam: pion |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 675 Pomógł: 15 Dołączył: 7.11.2004 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Jeśli tak to to by oznaczalo, że należy tworzyć indexy na wszystkie kombinacje danych? Na pewno nie - pamiętaj, że indeksy zajmują miejsce, często bardzo dużo miejsca (nie raz zdarzało się, że ponad 70% miejsca na dysku zajmowały nie dane, a indeksy). Nie ma sensu tworzyć nadmiarowych indeksów. Cytat Duża liczba indeksów jest uzasadniona w sporadycznych przypadkach, zawsze jednak w momencie napotkania tabel wymagających dużej liczby indeksów warto ponownie rozważyć poprawność projektu. Kiedy np. nie ma sensu stosować indeksów: - gdy trzeba przeszukać całą tabelę (np. aby zliczyć, ilu użytkowników ma status aktywny, a ilu nieaktywny), - gdy wyszukiwana wartość w kolumnie jest działaniem jakiejś funkcji (np. substr). W Twoim przypadku dałbym indeks złożony na kolumny: login, haslo, aktywny. Należy pamiętać, że będzie on także użyteczny, gdy będziesz wyszukiwał tylko wg loginu, bądź tylko według loginu i hasła (porównania oczywiście muszą być w tej samej kolejności, w jakiej tworzą indeks). Cytat Indeks złożony jest w pełni użyteczny nawet w przypadku, gdy nie są określone niektóre kolumny klucza, pod warunkiem że są określone wszystkie kolumny z początku klucza // Cytaty "SQL. Sztuka programowania." /S. Faroult, P.Robson/ |
|
|
![]()
Post
#3
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
W Twoim przypadku dałbym indeks złożony na kolumny: login, haslo, aktywny. Należy pamiętać, że będzie on także użyteczny, gdy będziesz wyszukiwał tylko wg loginu, bądź tylko według loginu i hasła (porównania oczywiście muszą być w tej samej kolejności, w jakiej tworzą indeks). O taką informację mi chodziło, dzięki serdeczne! (IMG:http://forum.php.pl/style_emoticons/default/thumbsupsmileyanim.gif) // EDIT: Jednak coś jeszcze nie daje mi spokoju. Mając taką tabelę:
jak powinieniem założyć indexy? Dane będą zawsze (!) wyszukiwane po region_id oraz is_active oraz opcjonalnie jeśli user wybierze standard to po standardzie oraz jeśli zaznaczy is_luxury to po tym polu. Z góry dzięki za info. pion Ten post edytował phpion.com 16.12.2007, 18:46:17 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 16:29 |