[mysql] vraagje over primary key

Pagina: 1
Acties:

  • DPLuS
  • Registratie: April 2000
  • Niet online
Hoi,

Ik heb in Mysql de volgende tabel:
code:
1
2
3
4
5
6
7
8
CREATE TABLE `top40` (
  `year` year(4) NOT NULL default '0000',
  `week` int(2) NOT NULL default '0',
  `position` int(2) NOT NULL default '0',
  `title` varchar(255) NOT NULL default '',
  `artist` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`year`,`week`,`position`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0


Zoals je ziet heb ik een samengestelde primary key gedefinieerd over de velden jaar - week - positie.

Nu vroeg ik me af wanneer mysql het meest effectief omgaat met queries.
Ligt er bijv. automatisch al een index op de velden year en week als ik een query zoals deze uitvoer:
code:
1
SELECT * FROM top40 WHERE YEAR = 2000 AND WEEK = 20;


Of wordt de index pas goed benut als ik echt op alle 3 de velden van de primary key zoek??

Beetje vage vraag maar ik kon het verder niet echt vinden...

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:13
Niet specfiek over MySQL, maar afaik zullen alle DBMS'en in dit geval de index kunnen gebruiken.

Stel je hebt in index op een tabel die er zo uit ziet:
code:
1
veld1, veld2, veld3

De index ligt dus op deze 3 velden, in deze volgorde.
Als je dan een query uitvoert waarvan de WHERE er zo uit ziet:
code:
1
WHERE veld1 = 'blaa'

of
code:
1
WHERE veld1 = 'blaa' and veld2 = 2

dan zal die index gebruikt worden.

Als je WHERE clausule er echter zo uit ziet:
code:
1
WHERE veld2 = 2

of
code:
1
WHERE veld2 = 2 AND veld3 = 'melk'

of [codeWHERE veld3 = 'melk'[/]
dan zal je index niet gebruikt worden.

https://fgheysels.github.io/