|
| mysql - index: hvilken betydning har Key_n~ Fra : Morten Lindow |
Dato : 22-05-03 08:59 |
|
Hej
Jeg har lige lavet index over en kæmpe tabel ved i min create table
statement at tilføje: INDEX (hit_id, result_id, start_hit, end_hit)
Jeg skal lave nogle joins baseret på start_hit og end_hit. Har det i den
forbindelse nogen betydning at Key_name for index på disse kollonner er
hit_id og ikke kolloners egne navne?
mysql> show index from ricehomo_hsp;
+--------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name |
Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+--------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| ricehomo_hsp | 0 | PRIMARY | 1 | hsp_id | A
| 13507560 | NULL | NULL | | BTREE | |
| ricehomo_hsp | 1 | hit_id | 1 | hit_id | A
| 13507560 | NULL | NULL | | BTREE | |
| ricehomo_hsp | 1 | hit_id | 2 | result_id | A
| 13507560 | NULL | NULL | | BTREE | |
| ricehomo_hsp | 1 | hit_id | 3 | start_hit | A
| 13507560 | NULL | NULL | | BTREE | |
| ricehomo_hsp | 1 | hit_id | 4 | end_hit | A
| 13507560 | NULL | NULL | | BTREE | |
+--------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+----
| |
Peter Brodersen (22-05-2003)
| Kommentar Fra : Peter Brodersen |
Dato : 22-05-03 21:16 |
|
On Thu, 22 May 2003 09:59:29 +0200, Morten Lindow <morten@binf.ku.dk>
wrote:
>Jeg skal lave nogle joins baseret på start_hit og end_hit. Har det i den
>forbindelse nogen betydning at Key_name for index på disse kollonner er
>hit_id og ikke kolloners egne navne?
Nej. Key_name er bare indexets navn. Du kan evt. selv vælge et mere
sigende index-navn, fx:
INDEX hitmedmere (hit_id, result_id, start_hit, end_hit)
Vælger du ikke noget navn, får det bare navnet på den første kolonne -
i dette tilfælde "hit_id". Findes et index med det navn i forvejen,
vil den få navnet "hit_id_2", og så fremdeles.
Navnet er udelukkende for at du kan referere til det specifikke index
(fx hvis det skal droppes, explicit bruges i en select, etc.).
Du kan se om dit index bliver brugt, ved at tilføje EXPLAIN før din
query, fx:
EXPLAIN SELECT * FROM ricehomo_hsp WHERE hit_id > 10;
--
- Peter Brodersen
| |
Morten Lindow (23-05-2003)
| Kommentar Fra : Morten Lindow |
Dato : 23-05-03 11:47 |
|
Peter Brodersen wrote:
>
> Nej. Key_name er bare indexets navn. Du kan evt. selv vælge et mere
> sigende index-navn, fx:
>
> INDEX hitmedmere (hit_id, result_id, start_hit, end_hit)
Siger jeg "SHOW INDEX FROM table " får jeg at kollone end_hit står i
indexet ved navn "hit_id" og har værdien seq_in_index = 4.
Betyder det ikke at end_hit blot er en del af en lang indgang i indexet?
Og at jeg ikke kan bruge indexet til at søge efter end_hit alene?
Hvis jeg istedet siger
INDEX(hit_id);
INDEX(result_id);
INDEX(start_hit);
INDEX(end_hit);
så får hvert kollone sit eget index - der bliver bygget et seperat BTREE
over hver kollone.
Morten
| |
Peter Brodersen (23-05-2003)
| Kommentar Fra : Peter Brodersen |
Dato : 23-05-03 17:45 |
|
On Fri, 23 May 2003 12:47:10 +0200, Morten Lindow <morten@binf.ku.dk>
wrote:
>> INDEX hitmedmere (hit_id, result_id, start_hit, end_hit)
>Siger jeg "SHOW INDEX FROM table " får jeg at kollone end_hit står i
>indexet ved navn "hit_id" og har værdien seq_in_index = 4.
>
>Betyder det ikke at end_hit blot er en del af en lang indgang i indexet?
Ah, jo. Jeg fik vist igen misforstået noget.
> Og at jeg ikke kan bruge indexet til at søge efter end_hit alene?
Det er korrekt. Der skal et selvstændigt index til.
--
- Peter Brodersen
| |
|
|