Avatar billede sth Novice
03. januar 2005 - 11:05 Der er 9 kommentarer og
1 løsning

Hjælp til optimering af tabel

jeg har denne tabel

CREATE TABLE ugedata (
  id int(11) NOT NULL auto_increment,
  segment varchar(15) NOT NULL default '',
  sted int(11) NOT NULL default '0',
  Uge smallint(6) NOT NULL default '0',
  aar int(11) NOT NULL default '0',
  AAftaler int(11) default '0',
  AAftaler_forsinket int(11) default '0',
  KAftaler int(11) default NULL,
  KAftaler_forsinket int(11) default NULL,
  SAftaler int(11) default NULL,
  SAftaler_forsinket int(11) default NULL,
  Akunder int(11) default NULL,
  Akunder_forsinket int(11) default NULL,
  Bkunder int(11) default NULL,
  Bkunder_forsinket int(11) default NULL,
  Ckunder int(11) default NULL,
  Ckunder_forsinket int(11) default NULL,
  Dkunder int(11) default NULL,
  Dkunder_forsinket int(11) default '0',
  Ikunder int(11) default NULL,
  Ikunder_forsinket int(11) default NULL,
  PRIMARY KEY  (sted,Uge,aar,id,segment),
  KEY id (id)
) TYPE=MyISAM;

Kan den optimeres, og er det smart at have PRIMARY KEY  på et felt af typen varchar(15) ?
Avatar billede arne_v Ekspert
03. januar 2005 - 11:09 #1
Da id er auto increment, så vil jeg næsten tro at det burde være primary key
alene.

En varchar er ikke så slem som primary key, men en primary key med 5 felter
er nok meget upraktisk.
Avatar billede erikjacobsen Ekspert
03. januar 2005 - 11:15 #2
Hvad skal du bruge tabellen til, og specielt hvad skal du søge efter?
Avatar billede sth Novice
03. januar 2005 - 11:34 #3
jeg skal udsøge data pr. segment, pr. sted over de sidste 12 uger.

først finder jeg hvilke segmenter jeg har med følgende sql

SQLstmt ="SELECT segment FROM ugedata GROUP BY segment ORDER BY segment "
her finder jeg så alle sigmenter, disse køres i en loop

når jeg så har et segment finder jeg middelværdien for dette segment med denne sql
SELECT  Sum(akunder + bkunder + ckunder + dkunder + ikunder) AS total,Sum(akunder_forsinket + bkunder_forsinket + ckunder_forsinket + dkunder_forsinket + ikunder_forsinket) AS total_forsinket FROM ugedata  WHERE segment = '"& rs992("segment") &"' ORDER BY aar DESC,Uge DESC LIMIT " & Session("antal_uger")
hvor rs992("segment") er segmentet fra den første sql

efter følgende  laver jeg så nogle opslag pr segment pr sted pr uge

hvad jeg ikke fatter er at hvis jeg afviker min sql på basen får jeg nogle gode svar tider, men når jeg så køre dem alle i mit asp, så køre det bare for langsomt
Avatar billede erikjacobsen Ekspert
03. januar 2005 - 11:42 #4
Du skal overveje

1) en GROUP BY
2) index på segment
3) Øøøh, din anden SELECT giver een række fordi du kun har nogle SUM(...) felter,
  så din ORDER BY og LIMIT er helt overflødige.
Avatar billede sth Novice
03. januar 2005 - 11:54 #5
Tak for de hurtige svar:)
1 jeg har da en GROUP By på den første SELECT  ?

2 mener du ALTER TABLE `ugedata` ADD INDEX segment (segment)

3 Ja jeg kan da lige se du har ret !
det giver samme resultat lige meget hvad jeg sætter LIMIT 12 eller 2
hvad skal jeg gøre for kun at få en sum på de sidste 12 uger
Avatar billede erikjacobsen Ekspert
03. januar 2005 - 11:59 #6
Ja, jeg mener

1) kun en GROUP BY og een SELECT, altså kombinere de 2

3) Du skal med en WHERE vælge de uger, der er relevante.
Avatar billede sth Novice
03. januar 2005 - 12:10 #7
det fatter jeg ikke,

jeg prøver lige igen.

det jeg gerne skal kommer frem til er noget der ligner dette:
Segment  middel  uge52  uge51  uge50  uge50  ugeXX
1        95%      95%    92%  90%    98%  90%
2        93%      92%    92%  90%    98%  90%
3        94%      95%    92%  90%    98%  90%

Når jeg så køre musen hen over nogle procenter får jeg så vist detail pr. sted.

Det virker alt sammen godt nok men ikke på middelværdien pr. segment, og jeg forstår ikke hvordan jeg kun får fat i de sidste 12 uger og ikke som nu alle


for hvordan kommer jeg så gennem alle segmenter kan du hjælpe, betaler selvf. gerne flere point
Avatar billede sth Novice
22. juni 2005 - 22:18 #8
rikjacobsen smider du lige et svar, jeg beklager at jeg ikke har fået lukket dette spørgsmål noget før
Avatar billede erikjacobsen Ekspert
23. juni 2005 - 12:07 #9
Det er ligemeget med mig - jeg samler slet ikke på point.
Avatar billede sth Novice
16. december 2005 - 19:29 #10
-
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