Avatar billede falslev Nybegynder
11. oktober 2004 - 13:45 Der er 12 kommentarer

Hjælp til index

Databaserne:

Mads
---------------------
ID
Priority
Url
BannerTag
Area_Sort
Area_ViewItem
Active
E_Views
Views_Total
E_Clicks
Clicks_Total


Mads_Areas
---------------------
MadsID
ForumID



Forspørgslen:

SELECT MadsAreasAlias.MadsID AS Arr0, MadsAreasAlias.ForumID AS Arr1,
MadsAlias.Priority AS Arr2, MadsAlias.Url AS Arr3, MadsAlias.BannerTag AS Arr4, MadsAlias.Area_Sort AS Arr5, MadsAlias.Area_ViewItem AS Arr6 
FROM Mads_Areas AS MadsAreasAlias, Mads AS MadsAlias
WHERE MadsAlias.ID=MadsAreasAlias.MadsID AND MadsAlias.Active=1 AND MadsAlias.E_Views>MadsAlias.Views_Total AND MadsAlias.E_Clicks>MadsAlias.Clicks_Total
ORDER BY MadsAreasAlias.MadsID, MadsAreasAlias.ForumID;
Avatar billede arne_v Ekspert
11. oktober 2004 - 13:59 #1
Der skal som tommelfinger regel index på alle felter som optræder
i forbindelse med et = tegn !

Bemærk at der allerede er index på primær nøgler så dem behøver
du ikke sætte på.
Avatar billede falslev Nybegynder
11. oktober 2004 - 14:08 #2
Men forstår ikke hvordan når det er over 2 databaser.
Skal der ikke index på når det er <> ?
Kan du give et eks.
Avatar billede ldanielsen Nybegynder
11. oktober 2004 - 15:29 #3
Først: Du har ikke to databaser, du har én database med to tabeller

Jeg går udfra at ID er primær nøgle i tabellen Mads. Jeg ville så vælge at indexere MadsID i tabellen Mads_Areas, fordi det er det felt der skal svare til ID i Mads.

Man kunne også vælge at indexere Mads_Areas.ForumID, fordi du sikkert ofte vil sortere efter ForumID, eller SELECT'e noget hvor ForumID skal være noget bestemt.

De andre kolonner som du bruger i din WHERE, som skal være større end eller mindre end hinanden kunne man også indexere, men spar lidt på det. Se hvor meget udbytte du får, og hus at su sagtens kan slette et index igen.

I øvrigt: Du bruger alias til dine tabeller, det er da vist ikke nødvendigt, er det?
Avatar billede arne_v Ekspert
11. oktober 2004 - 15:37 #4
Jeg tror heller ikke at databasen kan udnytte index på felter som bruges
med > eller <, men du kan jo prøve.
Avatar billede ldanielsen Nybegynder
11. oktober 2004 - 15:44 #5
MS SQL kan. I den angiver du også om dine indexer skal sorteres ASC eller DESC
Avatar billede majkat Nybegynder
13. oktober 2004 - 10:07 #6
MySQL kan også, men vil ignorere indexes hvis tabellen er meget lille eller hvis det på forhånd kan udregnes, at en væsenlig del af posterne (vist nok omkring 30%) skal kigges på -- i dette tilfælde antages det at være hurtigere simpelt hen at læse hele tabellen og grave informationerne frem.

falslev>> skriv EXPLAIN foran din SELECT, og læg output her. Overvej evt. at afslutte med "\G" frem for ";" -- det gør tingene lidt mere læsbare :-)
Avatar billede falslev Nybegynder
14. oktober 2004 - 09:23 #7
Har prøvet men kan ikke få Tabellen Mads til at bruge nogle index.
Derimod virker det fint på Mads_Areas.

Nogen der kan komme med et brugbart eks?
Avatar billede arne_v Ekspert
14. oktober 2004 - 19:18 #8
Kan du ikke oprette INDEX ?

Eller vil MySQL ikke bruge dem ifølge EXPLAIN ?
Avatar billede falslev Nybegynder
21. oktober 2004 - 09:22 #9
Jeg kan ikke få MySQL til at bruge dem når jeg efgterfølgende checker med EXPLAIN.
Avatar billede majkat Nybegynder
21. oktober 2004 - 10:30 #10
Hvor meget data har du i dine tabeller? Hvis du kun har nogle få rækker vil MySQL ignorere dine indeks ud fra en betragtning om det er meget hurtigere at indlæse hele tabellen med det samme...

Som tidligere skrevet: vis din EXPLAIN her, så slipper vi for at lave gætværk
Avatar billede falslev Nybegynder
25. oktober 2004 - 10:26 #11
Tabllerne indeholder pt. ca. 50 rækker.
Vil gerne vise mit explain men jeg har jo endnu ikke noget index på da det jo er det jeg søger hjælp til.
Avatar billede majkat Nybegynder
25. oktober 2004 - 11:28 #12
Det er ligegyldigt om du har indexes - en EXPLAIN fortæller stadigvæk hvordan MySQL ser på dine joins.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Senior Platform Engineer

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Netværksarkitekt til Forsvarets Cyberdivision i Hvidovre eller Karup