Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jaki najlepszy klucz wybrać dla tej tabeli ?
gothye
post
Post #1





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

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


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 ?

Ten post edytował gothye 16.01.2010, 22:30:05
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
goszczu
post
Post #2





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 12.11.2006
Skąd: Łodź

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


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





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

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


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 (IMG:style_emoticons/default/sad.gif)



Niemyślałem że klucze w sql sprawią taką trudność ,naprawdę nikt nie wie jak można rozwiązać ten problem ?
Go to the top of the page
+Quote Post
Mchl
post
Post #4





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


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

Ten post edytował Mchl 27.01.2010, 18:57:09
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: 23.08.2025 - 11:01