phpbar.de logo

Mailinglisten-Archive

langsame select mit group by

langsame select mit group by

Cybot lists at sebastianmendel.de
Die Aug 12 10:51:31 CEST 2003


Ulrich Kretschmer wrote:

> Hallo,
> ...und wenn Du einen Index anlegt über _alle_ Felder, die Dein select 
> angreift? sprich: alter table mytable add index mybigkey (ort, artikel, 
> tinfo2, km, status);

ein index über alle felder nimmt er dann zwar aber das macht das query 
nicht schneller, braucht immer noch 0,16 sec.

ein umsortieren des WHERE bringt mich auch maximal auf 0,11 sec. runter

ein reines

  SELECT COUNT(*) FROM `artikel` GROUP BY `ort`

benötigt 0,0009 sec.
sobald aber eine WHERE hinzukommt

  SELECT COUNT(*) FROM `artikel` WHERE `tinfo2` = '1' GROUP BY `ort`

auf eines der drei felder benötigt es mindesten 0,11 sec, mit 
verwendetem index (ort,tinfo2)

und das obwohl alle drei felder eine Kardinaltät von 1 haben, kann sie 
aber auch nicht weg lassen da sich das später noch ändern könnte


die tabelle is optimiert, repariert und sortiert

> 
> Ulrich
> 
>>Hi,
>>
>>irgendwie habe ich das gefühl das mein select irgendwo ünnötigerweiße
>>extrem langsam ist:
>>
>>    SELECT `ort`,
>>           COUNT(`ort`)
>>      FROM `artikel`
>>     WHERE `tinfo2` = 1
>>       AND `km` = 'k'
>>       AND `status` = '1'
>>  GROUP BY `ort`
>>
>>es benötigt 0.16 sekunden oder länger
>>
>>es will einfach keinen index verwenden:
>>
>>habe folgende indizes probiert:
>>
>>(id)
>>(titel)
>>(tinfo2)
>>(km)
>>(status)
>>(tinfo2,km,status)
>>(ort)
>>
>>es sind 3.500 datensätze in der db
>>das ergebnis liefert ca. 600



CREATE TABLE `artikel` (
   `id` int(11) NOT NULL auto_increment,
   `km` enum('k','m') NOT NULL default 'k',
   `tinfo1` int(11) default NULL,
   `tinfo2` int(11) default NULL,
   `tinfo3` int(11) default NULL,
   `tinfo4` int(11) default NULL,
   `titel` varchar(100) default NULL,
   `titelintern` varchar(100) default NULL,
   `status` varchar(10) NOT NULL default '1',
   `kaufpreis` decimal(8,2) default NULL,
   `waehrung` varchar(4) NOT NULL default 'EUR',
   `zusatzkosten` decimal(8,2) default NULL,
   `mietpreis` decimal(8,2) default NULL,
   `mietnk` double(8,2) default NULL,
   `jahr` int(11) default NULL,
   `strasse` varchar(50) default NULL,
   `plz` varchar(8) default NULL,
   `ort` varchar(50) default NULL,
   `kontaktadresse` int(11) default NULL,
   `chinfo1` varchar(100) default NULL,
   `chinfo2` varchar(100) default NULL,
   `chinfo3` varchar(100) default NULL,
   `chinfo4` varchar(100) default NULL,
   `beschreibung1` text,
   `beschreibung2` text,
   `beschreibung3` text,
   `intinfo1` int(11) default NULL,
   `intinfo2` int(11) default NULL,
   `intinfo3` int(11) default NULL,
   `intinfo4` int(11) default NULL,
   `decinfo1` decimal(8,2) default NULL,
   `decinfo2` decimal(8,2) default NULL,
   `decinfo3` decimal(8,2) default NULL,
   `bild1` varchar(50) default NULL,
   `bild1text` text,
   `bild2` varchar(50) default NULL,
   `bild2text` text,
   `bild3` varchar(50) default NULL,
   `bild3text` text,
   `bild4` varchar(50) default NULL,
   `bild4text` text,
   `bild5` varchar(50) default NULL,
   `bild5text` text,
   `angesehen` int(11) default '0',
   `angefragt` int(11) default '0',
   PRIMARY KEY  (`id`),
   KEY `titel` (`titel`),
   KEY `km` (`km`),
   KEY `status` (`status`),
   KEY `ort` (`ort`),
   KEY `tinfo2` (`tinfo2`),
   KEY `ort_tinfo2` (`ort`,`tinfo2`)
) TYPE=MyISAM AUTO_INCREMENT=2562 ;


-- 
Sebastian Mendel

www.sebastianmendel.de
www.tekkno4u.de
www.nofetish.com

-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive