Einzelnen Beitrag anzeigen
  #9  
Alt 28.10.2010, 23:09:03
droehn droehn ist offline
Anfänger
 
Registriert seit: Oct 2010
Alter: 51
Beiträge: 19
AW: COUNT mit JOINs und sub-queries kriechend langsam

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
Mit Zitat antworten