Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jaki najlepszy klucz wybrać dla tej tabeli ?
Forum PHP.pl > Forum > Bazy danych > MySQL
gothye
Witam

mam tabele w mysql :

[SQL] pobierz, plaintext
  1. (int)user , (int)friend 
[SQL] pobierz, plaintext

i jeśli mam założony klucz :

[SQL] pobierz, plaintext
  1. UNIQUE KEY `user` (`user`,`friend`) 
[SQL] pobierz, plaintext

i wyszukuję z tabeli rekordy w warunku WHERE user=

wyszukiwanie trwa szybko ,lecz jeśli wyszukuję za pomocą WHERE friend= już nie jest tak różowo ,jak dobrac klucze aby przyspieszyć wyszukiwanie  za pomocą drugiego sposobu ?
goszczu
Napisz ile rekordów ma tabela oraz ile jest unikalnych wpisów kolumnie pierwszej i drugiej. Ja po pierwsze spróbowałbym
utworzyć indeks na drugiej kolumnie.
gothye
forum docelowo moze zawierac 100 000 userów co daje w przybliżeniu ok 4.000.000 rekordów ,

wpisy w user, friend są nie powtarzające się ,na testowej bazie z taką ilością rekordów i kluczem primary key (`user`,`friend`) wyszukiwanie po kolumnie user trwa 10ms a po kolumnie friend 4s sad.gif



Niemyślałem że klucze w sql sprawią taką trudność ,naprawdę nikt nie wie jak można rozwiązać ten problem ?
Mchl
Masz w manualu cały rozdział na ten temat.

http://dev.mysql.com/doc/refman/5.1/en/mysql-indexes.html

Podstawowa zasada: Zakładasz klucze na kolumny wg których szukasz. Klucze na kilku kolumnach działają 'od lewej'. Czyli twój klucz user zadziała w zapytaniu
WHERE user = ?, WHERE user = ? AND friend = ?, ale WHERE friend = ? i WHERE friend =? AND user = ? nie zadziała. Dla drugiego przypadku potrzebujesz klucza, który zaczyna się od kolumny 'friend'.
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.