Current 1.7: ------------ EXPLAIN SELECT DISTINCT ezkeyword.keyword FROM ezkeyword_attribute_link, ezkeyword, ezcontentobject, ezcontentobject_name, ezcontentobject_attribute, ezcontentobject_tree, ezcontentclass WHERE ezkeyword.id = ezkeyword_attribute_link.keyword_id AND ezkeyword_attribute_link.objectattribute_id = ezcontentobject_attribute.id AND ezcontentobject_tree.contentobject_id = ezcontentobject_attribute.contentobject_id AND ezkeyword.class_id = ezcontentclass.id AND ezcontentclass.identifier IN ( 'article', 'image' ) AND ezcontentobject_tree.path_string like '/1/2/%' AND ezcontentobject_tree.node_id != 2 AND ezcontentobject_tree.is_invisible = 0 AND ((ezcontentobject.section_id in (1)) OR (ezcontentobject.contentclass_id in (29, 33, 35, 36, 37, 45) AND ezcontentobject.section_id in (3))) AND ezcontentobject.language_mask & 31 > 0 AND ezcontentobject_tree.contentobject_id = ezcontentobject_name.contentobject_id AND ezcontentobject_tree.contentobject_version = ezcontentobject_name.content_version AND ( ezcontentobject_name.language_id & ezcontentobject.language_mask > 0 AND ( ( ezcontentobject.language_mask - ( ezcontentobject.language_mask & ezcontentobject_name.language_id ) ) & 1 ) + ( ( ( ezcontentobject.language_mask - ( ezcontentobject.language_mask & ezcontentobject_name.language_id ) ) & 16 ) >> 3 ) + ( ( ( ezcontentobject.language_mask - ( ezcontentobject.language_mask & ezcontentobject_name.language_id ) ) & 8 ) >> 1 ) + ( ( ( ezcontentobject.language_mask - ( ezcontentobject.language_mask & ezcontentobject_name.language_id ) ) & 4 ) << 1 ) + ( ( ( ezcontentobject.language_mask - ( ezcontentobject.language_mask & ezcontentobject_name.language_id ) ) & 2 ) << 3 ) < ( ezcontentobject_name.language_id & 1 ) + ( ( ezcontentobject_name.language_id & 16 ) >> 3 ) + ( ( ezcontentobject_name.language_id & 8 ) >> 1 ) + ( ( ezcontentobject_name.language_id & 4 ) << 1 ) + ( ( ezcontentobject_name.language_id & 2 ) << 3 ) ) ORDER BY ezkeyword.keyword ASC; +----+-------------+---------------------------+------+--------------------------------------------------------------------------------------------------------------------------+--------------------------------+---------+-------------------------------------------------------------------------------------------------------------+------+------------------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------------------------+------+--------------------------------------------------------------------------------------------------------------------------+--------------------------------+---------+-------------------------------------------------------------------------------------------------------------+------+------------------------------------------+ | 1 | SIMPLE | ezkeyword | ALL | PRIMARY | NULL | NULL | NULL | 39 | Using temporary; Using filesort | | 1 | SIMPLE | ezcontentclass | ref | PRIMARY | PRIMARY | 4 | ezp_master.ezkeyword.class_id | 1 | Using where; Distinct | | 1 | SIMPLE | ezkeyword_attribute_link | ref | ezkeyword_attr_link_keyword_id,ezkeyword_attr_link_kid_oaid,ezkeyword_attr_link_oaid | ezkeyword_attr_link_keyword_id | 4 | ezp_master.ezkeyword.id | 1 | Distinct | | 1 | SIMPLE | ezcontentobject_attribute | ref | PRIMARY,ezcontentobject_attr_id,ezcontentobject_attribute_co_id_ver_lang_code,ezcontentobject_attribute_contentobject_id | PRIMARY | 4 | ezp_master.ezkeyword_attribute_link.objectattribute_id | 1 | Distinct | | 1 | SIMPLE | ezcontentobject_tree | ref | PRIMARY,ezcontentobject_tree_co_id,ezcontentobject_tree_path | ezcontentobject_tree_co_id | 5 | ezp_master.ezcontentobject_attribute.contentobject_id | 1 | Using where; Distinct | | 1 | SIMPLE | ezcontentobject_name | ref | PRIMARY,ezcontentobject_name_co_id,ezcontentobject_name_cov_id | PRIMARY | 8 | ezp_master.ezcontentobject_attribute.contentobject_id,ezp_master.ezcontentobject_tree.contentobject_version | 1 | Distinct | | 1 | SIMPLE | ezcontentobject | ALL | ezcontentobject_classid | NULL | NULL | NULL | 49 | Using where; Distinct; Using join buffer | +----+-------------+---------------------------+------+--------------------------------------------------------------------------------------------------------------------------+--------------------------------+---------+-------------------------------------------------------------------------------------------------------------+------+------------------------------------------+ 7 rows in set (0.05 sec) New 1.7: -------- EXPLAIN SELECT DISTINCT ezkeyword.keyword FROM ezkeyword, ezkeyword_attribute_link LEFT JOIN ezcontentobject_attribute ON ezkeyword_attribute_link.objectattribute_id = ezcontentobject_attribute.id LEFT JOIN ezcontentobject ON ezcontentobject_attribute.contentobject_id = ezcontentobject.id LEFT JOIN ezcontentobject_tree ON ezcontentobject_attribute.contentobject_id = ezcontentobject_tree.contentobject_id LEFT JOIN ezcontentobject_name ON ezcontentobject_attribute.contentobject_id = ezcontentobject_name.contentobject_id WHERE ezkeyword.id = ezkeyword_attribute_link.keyword_id AND ezcontentobject.status = 1 AND ezcontentobject.contentclass_id IN ( 16, 33 ) AND ezcontentobject_tree.path_string like '/1/2/%' AND ezcontentobject_tree.node_id != 2 AND ezcontentobject_tree.is_invisible = 0 AND ((ezcontentobject.section_id in (1)) OR (ezcontentobject.contentclass_id in (29, 33, 35, 36, 37, 45) AND ezcontentobject.section_id in (3))) AND ezcontentobject.language_mask & 31 > 0 AND ezcontentobject_tree.contentobject_id = ezcontentobject_name.contentobject_id AND ezcontentobject_tree.contentobject_version = ezcontentobject_name.content_version AND ( ezcontentobject_name.language_id & ezcontentobject.language_mask > 0 AND ( ( ezcontentobject.language_mask - ( ezcontentobject.language_mask & ezcontentobject_name.language_id ) ) & 1 ) + ( ( ( ezcontentobject.language_mask - ( ezcontentobject.language_mask & ezcontentobject_name.language_id ) ) & 16 ) >> 3 ) + ( ( ( ezcontentobject.language_mask - ( ezcontentobject.language_mask & ezcontentobject_name.language_id ) ) & 8 ) >> 1 ) + ( ( ( ezcontentobject.language_mask - ( ezcontentobject.language_mask & ezcontentobject_name.language_id ) ) & 4 ) << 1 ) + ( ( ( ezcontentobject.language_mask - ( ezcontentobject.language_mask & ezcontentobject_name.language_id ) ) & 2 ) << 3 ) < ( ezcontentobject_name.language_id & 1 ) + ( ( ezcontentobject_name.language_id & 16 ) >> 3 ) + ( ( ezcontentobject_name.language_id & 8 ) >> 1 ) + ( ( ezcontentobject_name.language_id & 4 ) << 1 ) + ( ( ezcontentobject_name.language_id & 2 ) << 3 ) ) ORDER BY ezkeyword.keyword ASC; +----+-------------+---------------------------+--------+--------------------------------------------------------------------------------------------------------------------------+--------------------------------+---------+--------------------------------------------------------------------------------------------------------+------+----------------------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------------------------+--------+--------------------------------------------------------------------------------------------------------------------------+--------------------------------+---------+--------------------------------------------------------------------------------------------------------+------+----------------------------------------------+ | 1 | SIMPLE | ezkeyword | index | PRIMARY | ezkeyword_keyword | 768 | NULL | 39 | Using index; Using temporary; Using filesort | | 1 | SIMPLE | ezkeyword_attribute_link | ref | ezkeyword_attr_link_keyword_id,ezkeyword_attr_link_kid_oaid,ezkeyword_attr_link_oaid | ezkeyword_attr_link_keyword_id | 4 | ezp_master.ezkeyword.id | 1 | Distinct | | 1 | SIMPLE | ezcontentobject_attribute | ref | PRIMARY,ezcontentobject_attr_id,ezcontentobject_attribute_co_id_ver_lang_code,ezcontentobject_attribute_contentobject_id | PRIMARY | 4 | ezp_master.ezkeyword_attribute_link.objectattribute_id | 1 | Using where; Distinct | | 1 | SIMPLE | ezcontentobject_tree | ref | PRIMARY,ezcontentobject_tree_co_id,ezcontentobject_tree_path | ezcontentobject_tree_co_id | 5 | ezp_master.ezcontentobject_attribute.contentobject_id | 1 | Using where; Distinct | | 1 | SIMPLE | ezcontentobject_name | ref | PRIMARY,ezcontentobject_name_co_id,ezcontentobject_name_cov_id | PRIMARY | 8 | ezp_master.ezcontentobject_tree.contentobject_id,ezp_master.ezcontentobject_tree.contentobject_version | 1 | Using where; Distinct | | 1 | SIMPLE | ezcontentobject | eq_ref | PRIMARY,ezcontentobject_classid,ezcontentobject_status | PRIMARY | 4 | ezp_master.ezcontentobject_tree.contentobject_id | 1 | Using where; Distinct | +----+-------------+---------------------------+--------+--------------------------------------------------------------------------------------------------------------------------+--------------------------------+---------+--------------------------------------------------------------------------------------------------------+------+----------------------------------------------+ 6 rows in set (0.00 sec) New 1.6: -------- EXPLAIN SELECT DISTINCT ezkeyword.keyword FROM ezkeyword, ezkeyword_attribute_link LEFT JOIN ezcontentobject_attribute ON ezkeyword_attribute_link.objectattribute_id = ezcontentobject_attribute.id LEFT JOIN ezcontentobject ON ezcontentobject_attribute.contentobject_id = ezcontentobject.id LEFT JOIN ezcontentobject_tree ON ezcontentobject_attribute.contentobject_id = ezcontentobject_tree.contentobject_id LEFT JOIN ezcontentobject_name ON ezcontentobject_attribute.contentobject_id = ezcontentobject_name.contentobject_id WHERE ezkeyword.id = ezkeyword_attribute_link.keyword_id AND ezcontentobject.status = 1 AND ezcontentobject_tree.path_string like '/1/2/%' AND ezcontentobject.contentclass_id = '16' AND ezcontentobject_tree.node_id != 2 AND ezcontentobject_tree.is_invisible = 0 AND ((ezcontentobject.section_id in (1)) OR (ezcontentobject.contentclass_id in (29, 33, 35, 36, 37, 45) AND ezcontentobject.section_id in (3))) AND ezcontentobject.language_mask & 31 > 0 AND ezcontentobject_tree.contentobject_id = ezcontentobject_name.contentobject_id AND ezcontentobject_tree.contentobject_version = ezcontentobject_name.content_version AND ( ezcontentobject_name.language_id & ezcontentobject.language_mask > 0 AND ( ( ezcontentobject.language_mask - ( ezcontentobject.language_mask & ezcontentobject_name.language_id ) ) & 1 ) + ( ( ( ezcontentobject.language_mask - ( ezcontentobject.language_mask & ezcontentobject_name.language_id ) ) & 16 ) >> 3 ) + ( ( ( ezcontentobject.language_mask - ( ezcontentobject.language_mask & ezcontentobject_name.language_id ) ) & 8 ) >> 1 ) + ( ( ( ezcontentobject.language_mask - ( ezcontentobject.language_mask & ezcontentobject_name.language_id ) ) & 4 ) << 1 ) + ( ( ( ezcontentobject.language_mask - ( ezcontentobject.language_mask & ezcontentobject_name.language_id ) ) & 2 ) << 3 ) < ( ezcontentobject_name.language_id & 1 ) + ( ( ezcontentobject_name.language_id & 16 ) >> 3 ) + ( ( ezcontentobject_name.language_id & 8 ) >> 1 ) + ( ( ezcontentobject_name.language_id & 4 ) << 1 ) + ( ( ezcontentobject_name.language_id & 2 ) << 3 ) ) ORDER BY ezkeyword.keyword ASC; +----+-------------+---------------------------+--------+--------------------------------------------------------------------------------------------------------------------------+--------------------------------------------+---------+--------------------------------------------------------------------------------------------------------+------+----------------------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------------------------+--------+--------------------------------------------------------------------------------------------------------------------------+--------------------------------------------+---------+--------------------------------------------------------------------------------------------------------+------+----------------------------------------------+ | 1 | SIMPLE | ezcontentobject | ref | PRIMARY,ezcontentobject_classid,ezcontentobject_status | ezcontentobject_classid | 4 | const | 7 | Using where; Using temporary; Using filesort | | 1 | SIMPLE | ezcontentobject_tree | ref | PRIMARY,ezcontentobject_tree_co_id,ezcontentobject_tree_path | ezcontentobject_tree_co_id | 5 | ezp_master.ezcontentobject.id | 1 | Using where | | 1 | SIMPLE | ezcontentobject_name | ref | PRIMARY,ezcontentobject_name_co_id,ezcontentobject_name_cov_id | PRIMARY | 8 | ezp_master.ezcontentobject_tree.contentobject_id,ezp_master.ezcontentobject_tree.contentobject_version | 1 | Using where | | 1 | SIMPLE | ezcontentobject_attribute | ref | PRIMARY,ezcontentobject_attr_id,ezcontentobject_attribute_co_id_ver_lang_code,ezcontentobject_attribute_contentobject_id | ezcontentobject_attribute_contentobject_id | 4 | ezp_master.ezcontentobject.id | 4 | Using where; Using index | | 1 | SIMPLE | ezkeyword_attribute_link | ref | ezkeyword_attr_link_keyword_id,ezkeyword_attr_link_kid_oaid,ezkeyword_attr_link_oaid | ezkeyword_attr_link_oaid | 4 | ezp_master.ezcontentobject_attribute.id | 1 | | | 1 | SIMPLE | ezkeyword | eq_ref | PRIMARY | PRIMARY | 4 | ezp_master.ezkeyword_attribute_link.keyword_id | 1 | | +----+-------------+---------------------------+--------+--------------------------------------------------------------------------------------------------------------------------+--------------------------------------------+---------+--------------------------------------------------------------------------------------------------------+------+----------------------------------------------+ 6 rows in set (0.00 sec)