Tolle Programme. Wo kann ich die kaufen...?
Der neue Index ist drinne aber ich denke die EXPLAIN Auswertung gibt sich ein wenig ignorant:
Code:
EXPLAIN SELECT COUNT(t1.id)...
+----+--------------------+-------+--------+----------------------------------------+-----------------+---------+---------------------------+-------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+-------+--------+----------------------------------------+-----------------+---------+---------------------------+-------+--------------------------+
| 1 | PRIMARY | p12 | index | deleted,idx_art_del_sup | idx_art_del_sup | 9 | NULL | 61271 | Using where; Using index |
| 1 | PRIMARY | t1 | eq_ref | PRIMARY,deleted,idx_id_deleted | PRIMARY | 4 | store_dwh.p12.artikleid | 1 | Using where |
| 1 | PRIMARY | r20 | eq_ref | PRIMARY,deleted | PRIMARY | 4 | store_dwh.p12.supplierid | 1 | |
| 1 | PRIMARY | p13 | ref | deleted,artikleid,supplierid | artikleid | 4 | store_dwh.t1.id | 1 | |
| 1 | PRIMARY | p15 | ref | deleted,artikleid | artikleid | 4 | store_dwh.t1.id | 1 | |
| 1 | PRIMARY | p11 | ref | deleted,artikleid,lang | artikleid | 4 | store_dwh.t1.id | 2 | |
| 3 | DEPENDENT SUBQUERY | p15b | ref | deleted,artikleid,validfrom | artikleid | 4 | store_dwh.p15.artikleid | 1 | Using where |
| 2 | DEPENDENT SUBQUERY | p13b | ref | deleted,artikleid,supplierid,validfrom | artikleid | 4 | store_dwh.p13.artikleid | 1 | Using where |
+----+--------------------+-------+--------+----------------------------------------+-----------------+---------+---------------------------+-------+--------------------------+
8 rows in set (0.00 sec)
Code:
SHOW CREATE TABLE articles
+---------------+------------------------------------------------------------------------------+
| Table | Create Table |
+---------------+------------------------------------------------------------------------------+
| articles | CREATE TABLE `articles` (
| | `id` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,
| | `cdate` int(10) NOT NULL,
| | `udate` int(10) NOT NULL,
| | `userid` int(10) NOT NULL,
| | `subsid` tinyint(4) NOT NULL,
| | `locked` tinyint(4) NOT NULL,
| | `deleted` tinyint(4) NOT NULL,
| | `artiklenbr` varchar(20) NOT NULL,
| | `cml` decimal(6,2) NOT NULL,
| | `cmw` decimal(6,2) NOT NULL,
| | `cmh` decimal(6,2) NOT NULL,
| | `kg` decimal(7,3) NOT NULL,
| | `size` int(5) NOT NULL,
| | `unit` varchar(10) NOT NULL,
| | `warnqty` int(5) NOT NULL,
| | `density` decimal(5,4) NOT NULL,
| | `eshop` tinyint(1) NOT NULL,
| | PRIMARY KEY (`id`),
| | KEY `locked` (`locked`),
| | KEY `deleted` (`deleted`)
| | KEY `idx_id_deleted` (`id`,`deleted`)
| | ) ENGINE=MyISAM AUTO_INCREMENT=61370 DEFAULT CHARSET=utf8
+---------------+------------------------------------------------------------------------------+
ANALYZE TABLE meldet: Table is already up to date.
Aber: durch die Anpassung der Buffer hat sich der COUNT von 9,8 auf 9.3 Sekunden verbessert. Tataa! ;-) Aber um die Server-Einstellungen mache ich mir eh keine Sorgen, da früher oder später das Script beim Profi gehostet wird.
Ich glaube, ich komme langsam hinter die Logik Deiner Vorschläge: Die 'deleted' Spalte wurde mit der entsprechenden 'id' zusammen indiziert und damit muss MySQL nur einmal den Aspekt t1.id / t1.deleted prüfen?
Im Moment sind dort keine 'deleted' geflagt; ergab sich deshalb keine Verbesserung? Die 'deleted' Spalte in allen Tabellen führt im Moment kein Flag. Kann das Problem eventunnel damit zusammenhängen?
Grüsse
David