Mailinglisten-Archive |
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