Avatar billede jbp Nybegynder
05. december 2005 - 19:07 Der er 11 kommentarer og
1 løsning

Alternativ til COUNT i stor db

Hej,

Jeg sidder med en database med en tabel med 150000 poster, der er fordelt ud på ca 100 forksellige brugere. Det er meget vigtigt jeg har en oversigt der ud fra hver bruger står antallet af poster brugeren tilhører.
Lige nu bruger jeg "COUNT(bNr)WHERE bruger ='brugerId'" til hver af brugerne, men det tager op til 20sec før siden er loadet, og det er ik acceptabelt.

Nogen gode råd til hvad jeg kunne stille op?

Jeg overvejer at lave en tabel, bestående af antallet af poster for hver bruger, og så opdaterer den når nye tilføjes..

Andre ideer??
Avatar billede mikl-dk Nybegynder
05. december 2005 - 20:21 #1
Nej, du skal nok have gang i et felt, som du opdaterer, når der ændres i "store" tabel. Evt. blot i brugertabellen, så du er fri for at lave endnu en tabel. Hvilken database og version er det - MySQL?
Avatar billede erikjacobsen Ekspert
05. december 2005 - 20:40 #2
Du kan få det på een gang:

  select count(*),bruger group by bruger

Og så have et index på bruger.
Avatar billede elskermad.dk Nybegynder
05. december 2005 - 21:01 #3
nu ved jeg godt at det ikke er mit spørgsmål (beklager jpb) men hvordan laver man indexet erik?
Avatar billede mikl-dk Nybegynder
05. december 2005 - 21:17 #4
ALTER TABLE `tabel` ADD INDEX ( `bNr` )
Avatar billede jbp Nybegynder
05. december 2005 - 21:50 #5
Det er MySql 3.23.55
Jeg har fundet ud af jeg har en stor set identisk tabel, faktisk med flere poster i, men smider jeg min sql query efter denne, er der super performance tid..
På den langsomme tabel, er der en del større overhead end den på den nye.

Den langsomme fylder 17mb(overhead op 800kb), den hurtige fylder 11mb(overhead på 400kb). Men der burde der ikke være så stor forskel på performance.. for så stor en db er det jo heller ikke!
Kan det have noget med det overhead at gøre!?!?
Avatar billede mikl-dk Nybegynder
05. december 2005 - 22:00 #6
Prøv at smid strukturen på begge to. Det kunne godt lyde som om, at den ikke er ens.
Avatar billede jbp Nybegynder
05. december 2005 - 22:09 #7
LANGSOMME: (73000 poster, 17mb, overhead 800kb)
CREATE TABLE `rs_nunni` (
  `nr` int(11) NOT NULL auto_increment,
  `taeller` bigint(20) NOT NULL default '0',
  `dato` int(11) NOT NULL default '0',
  `beloeb` decimal(10,2) NOT NULL default '0.00',
  `id1` tinytext NOT NULL,
  `id2` tinytext NOT NULL,
  `tekst` tinytext NOT NULL,
  `rid` int(11) NOT NULL default '0',
  `aftid` int(11) NOT NULL default '0',
  `fullline` text NOT NULL,
  PRIMARY KEY  (`nr`)
) TYPE=MyISAM AUTO_INCREMENT=237387 ;

HURTIGE:(78000 poster, 11mb, overhead 400kb)
CREATE TABLE `rs_cavvi` (
  `nr` int(11) NOT NULL auto_increment,
  `taeller` bigint(20) NOT NULL default '0',
  `dato` int(11) NOT NULL default '0',
  `beloeb` decimal(10,2) NOT NULL default '0.00',
  `id1` tinytext NOT NULL,
  `id2` tinytext NOT NULL,
  `type` tinytext NOT NULL,
  `tekst` tinytext NOT NULL,
  `rid` int(11) NOT NULL default '0',
  `atid` int(11) NOT NULL default '0',
  `fullline` text NOT NULL,
  PRIMARY KEY  (`nr`),
  KEY `regnskabid` (`regnskabid`)
) TYPE=MyISAM AUTO_INCREMENT=270313 ;

Så meget forskel er der heller ikke på de to..
Avatar billede jbp Nybegynder
05. december 2005 - 22:23 #8
Det har hjulpet rigtig meget bare at kopiere den til et nyt navn og derefter omdøbt tilbage til det gamle.. Der var nok noget der ikke var helt optimalt!!!
Avatar billede erikjacobsen Ekspert
06. december 2005 - 08:23 #9
Der er en forskel ved  KEY `regnskabid` (`regnskabid`)
Men det er da ikke den tabel du har i dit spørgsmål?
Avatar billede jbp Nybegynder
23. december 2005 - 23:53 #10
smid et svar så det fint
Avatar billede erikjacobsen Ekspert
24. december 2005 - 00:43 #11
Jeg samler slet ikke på point, tak.
Avatar billede jbp Nybegynder
04. september 2007 - 21:35 #12
så svarer jeg selv
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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