Ik heb last van een zeer bijzonder performance probleem met een InnoDB UTF-8 MySQL v4.1.41 database:
Tabel `contacts`
( id, name, ... )
PRIMARY = `id`
INDEX = `name`
Tabel `contacts_has_contacts`
(id, parent_id, child_id )
PRIMARY = `id`
UNIQUE = ( parent_id, child_id )
De columns `parent_id` en `child_id` refereren beide naar `contacts`.`id`. De tabel zorgt er dus voor dat contactpersonen onder elkaar gehangen kunnen worden. In de praktijk is de query dus wat complexer, maar op dit niveau treedt het performance probleem al op.
De query
EXPLAIN in MySQL v5.1.53 en v5.1.41
In een iets oudere MySQL versie wordt het zelfs nog wat erger: (zie 'rows')
EXPLAIN in MySQL v5.0.37
Why oh why gebruikt ie een temporary table???? Bij nog iets meer joins gaat ie ook nog eens filesorten, dus dan is ie nog trager. Ik ben radeloos!
Tabel `contacts`
( id, name, ... )
PRIMARY = `id`
INDEX = `name`
Tabel `contacts_has_contacts`
(id, parent_id, child_id )
PRIMARY = `id`
UNIQUE = ( parent_id, child_id )
De columns `parent_id` en `child_id` refereren beide naar `contacts`.`id`. De tabel zorgt er dus voor dat contactpersonen onder elkaar gehangen kunnen worden. In de praktijk is de query dus wat complexer, maar op dit niveau treedt het performance probleem al op.
De query
SQL:
1
2
3
4
5
6
| SELECT c.id FROM contacts c LEFT JOIN contacts_has_contacts h ON c.id = h.parent_id GROUP BY c.id ORDER BY c.name ASC LIMIT 0 , 20 |
EXPLAIN in MySQL v5.1.53 en v5.1.41
code:
1
2
3
| id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE c index NULL name 194 NULL 20 Using index; Using temporary 1 SIMPLE cch ref parent_child parent_child 2 c.id 1 Using index |
In een iets oudere MySQL versie wordt het zelfs nog wat erger: (zie 'rows')
EXPLAIN in MySQL v5.0.37
code:
1
2
3
| id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE c index NULL name 194 NULL 9974 Using index; Using temporary 1 SIMPLE cch ref parent_child parent_child 2 c.id 1 Using index |
Why oh why gebruikt ie een temporary table???? Bij nog iets meer joins gaat ie ook nog eens filesorten, dus dan is ie nog trager. Ik ben radeloos!
[Voor 15% gewijzigd door Anoniem: 23996 op 24-06-2011 13:54]