Autor Zpráva
Pinqui
Profil
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
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
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
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
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
key id_mistnosti;
key komu_poslal;
key kdo_poslal,komu_poslal;
key cas_odeslani

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0