Autor | Zpráva | ||
---|---|---|---|
Pinqui Profil |
#1 · Zasláno: 20. 6. 2009, 11:44:07
Dobrý den,
Dejme tomu že mám tabulku s texty id_mistnosti id_textu kdo_poslal komu_poslal cas_odeslani text příklad chatů.. Na co dát indexy? bude dobrý dát na: key id_mistnosti; key kdo_poslal; key komu_poslal; key kdo_poslal,komu_poslal; ?? Nebo jinak? Děkuji |
||
TomášK Profil |
#2 · Zasláno: 20. 6. 2009, 12:22:19
Pro vytváření indexů není důležitá ani tak struktura tabulky jako dotazy, které se na tabulce budou
provádět. Obecně lze říct asi toto: * id_textu je pravděpodobně primární klíč, tam se index vytvoří automaticky * kdo_poslal, komu_poslal, id_mistnosti jsou cizí klíče (předpokládám) Pro každý cizí klíč by měl existovat index, který má daný sloupec jako první (v MySQL.InnoDB dokonce být musí). Jestli do toho indexu přidávat ještě nějaké sloupce záleží na dotazech. Pokud by měly zůstat jednosloupcové, pak se automaticky vytvoří, pokud sloupec nadefinujete jako cizí klíč (což je určitě vhodné). * indexy (kdo_poslal) a (kdo_poslal, komu_poslal) jsou duplicitní - první můžete vynechat * na času odeslání by měl být taky index, pokud podle toho chcete řadit (se správně zadaným * ASC/DESC) * na textu FULLTEXT, pokud by byl potřeba |
||
Pinqui Profil |
#3 · Zasláno: 20. 6. 2009, 13:28:51
TomášK
"* indexy (kdo_poslal) a (kdo_poslal, komu_poslal) jsou duplicitní - první můžete vynechat " Já jsem někde četl, že když budu posílat dotaz s podmínkou: where kdo_poslal = nick AND komu_poslal = nick musim mít : key kdo_poslal,komu_poslal; ale když chci vybírat jen where kdo_poslal = nick tak musím mít novej key kde bude jen : key kdo_poslal; ,že když zadám key kdo_poslal key komu_poslal; a budu chcít mít vpodmínce oboje, tak indexy nefungují Dotazy budou: vyber z db kde id_mistnosti = neco vyber z db kde kdo_poslal = neco vyber z db kde komu_poslal = neco vyber z db kde kdo_poslal = neco, komu_poslal = neco vyber z db kde cas_odeslani = neco |
||
TomášK Profil |
#4 · Zasláno: 20. 6. 2009, 14:46:02 · Upravil/a: TomášK
Co se opravdu používá můžete zjistit pomocí EXPLAIN. Při zadávání indexů záleží i na pořadí sloupců.
kdo_poslal = nick AND komu_poslal = nick musim mít : key kdo_poslal,komu_poslal; Ano, souhlasím. Asi by mohl být i key komu_poslal, kdo_poslal, nevím, jestli optimalizátor přijde na to, že ho může použít (pravděpodobně ano). kdo_poslal = nick tak musím mít novej key kde bude jen : key kdo_poslal; Nesouhlasím. Musíte mít index, kde bude kdo_poslal na prvním místě. Tedy key kdo_poslal, komu_poslal se použije, key komu_poslal, kdo_poslal ne. key kdo_poslal key komu_poslal; a budu chcít mít vpodmínce oboje, tak indexy nefungují Ano, souhlasím. Je potřeba mít jeden index nad oběma sloupci. |
||
Pinqui Profil |
#5 · Zasláno: 20. 6. 2009, 17:48:18
tak jak bych měl dát indexy, aby mi plnili funkci při výběrech co jsem psal?? stačí:
key kdo_poslal,komu_poslal; key id_mistnosti; key cas_odeslani na podmínky: 1) vyber z db kde id_mistnosti = neco 2) vyber z db kde kdo_poslal = neco 3) vyber z db kde komu_poslal = neco 4) vyber z db kde kdo_poslal = neco, komu_poslal = neco 5) vyber z db kde cas_odeslani = neco |
||
TomášK Profil |
#6 · Zasláno: 20. 6. 2009, 22:27:50
key id_mistnosti;
key komu_poslal; key kdo_poslal,komu_poslal; key cas_odeslani |
||
Časová prodleva: 15 let
|
0