드루팔 (Drupal 7)에서 실행 시간이 60 초 이상 걸리는 쿼리가 있습니다. 여러 조인이 있지만 조인되고있는 모든 항목에 인덱스가 있습니다 (BTREE). 왜 그렇게 천천히 실행되는지 모르겠습니다. 어쩌면 이것이 바로 그 방법일까요? 저는 DBA 나이 쿼리의 개발자는 아니지만 병 목을 진단하려고합니다. 예를 들어 Google에서 색인을 생성 할 때 큰 문제가 발생합니다.mySQL 실행 쿼리가 매우 느림 - 60 초
제공하신 도움에 감사드립니다.
* UPDATED 조회하고 변경 한 후 나는 적어도 약 20 % 아래로 처리 시간을 얻을 수 있었다 권장 것을, 참고 설명한다. 여전히 느리지 만 빨라지고 있습니다. where 및 order by 절의 모든 필드에는 인덱스가 있습니다. 또한, "! ="을 사용하지 않고 어떻게 사용할 수 있을지 잘 모르겠습니다. 제안은 분명 공개 될 것입니다. 마지막으로 filesort 사용을 중지하거나 색인을 존중하는 방법을 알지 못합니다. 도움이된다고 생각하면 색인을 게시하게되어 기쁩니다. 지금까지 도와 주신 모든 분들께 감사드립니다! * 본질적으로
SELECT
n.type AS type,
CASE
WHEN n.type = 'book_new' THEN workid.field_workid_target_id
ELSE n.nid
END AS uuid,
CASE
WHEN n.type = 'book_new' THEN UNIX_TIMESTAMP(MIN(sale_date.field_onsaledate_value))
ELSE n.created
END AS sort_date
FROM
node n
LEFT OUTER JOIN
field_data_field_related_books books ON n.nid = books.entity_id
LEFT OUTER JOIN
field_data_field_author_ref author_refs ON books.entity_id = author_refs.entity_id
LEFT OUTER JOIN
field_data_field_workid workid ON n.nid = workid.entity_id
LEFT OUTER JOIN
field_data_field_onsaledate sale_date ON workid.entity_id = sale_date.entity_id
LEFT OUTER JOIN
field_data_field_format format ON sale_date.entity_id = format.entity_id
LEFT OUTER JOIN
field_data_field_subjectcategories subjects ON format.entity_id = subjects.entity_id
AND subjects.field_subjectcategories_tid = '48981'
LEFT OUTER JOIN
field_data_field_subjectcategories subjects2 ON subjects.entity_id = subjects2.entity_id
AND subjects2.field_subjectcategories_tid = '54556'
LEFT OUTER JOIN
field_data_field_subjectcategories subjects3 ON subjects2.entity_id = subjects3.entity_id
AND subjects3.field_subjectcategories_tid = '61091'
WHERE
((books.field_related_books_target_id IN ('874271'))
OR (author_refs.field_author_ref_target_id IN ('874561' , '572716', '874551'))
OR (((subjects.field_subjectcategories_tid IS NOT NULL)
AND (subjects2.field_subjectcategories_tid IS NOT NULL))
OR ((subjects2.field_subjectcategories_tid IS NOT NULL)
AND (subjects3.field_subjectcategories_tid IS NOT NULL))
OR ((subjects.field_subjectcategories_tid IS NOT NULL)
AND (subjects3.field_subjectcategories_tid IS NOT NULL))))
AND (n.status = '1')
AND (n.type != 'wow')
AND (n.type != 'event')
AND (n.type != 'slice')
AND (n.nid NOT IN ('874271'))
AND (sale_date.field_onsaledate_value < CURDATE()
OR sale_date.field_onsaledate_value IS NULL)
AND ((format.field_format_tid NOT IN ('2296' , '4986', '1641', '1756'))
OR (format.field_format_tid IS NULL))
GROUP BY uuid
ORDER BY books.field_related_books_target_id = 874271 DESC ,
author_refs.field_author_ref_target_id = 874561 DESC ,
author_refs.field_author_ref_target_id = 572716 DESC ,
author_refs.field_author_ref_target_id = 874551 DESC ,
sort_date DESC
LIMIT 36 OFFSET 35;
+----+-------------+-------------+------+---------------------------------------+------------------+---------+---------------------------+--------+----------+--------------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------------+------+---------------------------------------+------------------+---------+---------------------------+--------+----------+--------------------------------------------------------+
| 1 | SIMPLE | n | ref | PRIMARY,node_status_type,node_type | node_status_type | 4 | const | 342627 | 100 | Using index condition; Using temporary; Using filesort |
| 1 | SIMPLE | books | ref | entity_id | entity_id | 4 | prhc2.n.nid | 1 | 100 | NULL |
| 1 | SIMPLE | author_refs | ref | entity_id | entity_id | 4 | prhc2.books.entity_id | 1 | 100 | NULL |
| 1 | SIMPLE | workid | ref | entity_id | entity_id | 4 | prhc2.n.nid | 1 | 100 | NULL |
| 1 | SIMPLE | sale_date | ref | entity_id | entity_id | 4 | prhc2.workid.entity_id | 1 | 100 | Using where |
| 1 | SIMPLE | format | ref | entity_id | entity_id | 4 | prhc2.sale_date.entity_id | 1 | 100 | Using where |
| 1 | SIMPLE | subjects | ref | entity_id,field_subjectcategories_tid | entity_id | 4 | prhc2.format.entity_id | 1 | 100 | Using where |
| 1 | SIMPLE | subjects2 | ref | entity_id,field_subjectcategories_tid | entity_id | 4 | prhc2.subjects.entity_id | 1 | 100 | Using where |
| 1 | SIMPLE | subjects3 | ref | entity_id,field_subjectcategories_tid | entity_id | 4 | prhc2.subjects2.entity_id | 1 | 100 | Using where |
+----+-------------+-------------+------+---------------------------------------+------------------+---------+---------------------------+--------+----------+--------------------------------------------------------+
describe node;
+-----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+----------------+
| nid | int(10) unsigned | NO | PRI | NULL | auto_increment |
| vid | int(10) unsigned | YES | UNI | NULL | |
| type | varchar(32) | NO | MUL | | |
| language | varchar(12) | NO | MUL | | |
| title | varchar(255) | NO | MUL | | |
| uid | int(11) | NO | MUL | 0 | |
| status | int(11) | NO | MUL | 1 | |
| created | int(11) | NO | MUL | 0 | |
| changed | int(11) | NO | MUL | 0 | |
| comment | int(11) | NO | | 0 | |
| promote | int(11) | NO | MUL | 0 | |
| sticky | int(11) | NO | | 0 | |
| tnid | int(10) unsigned | NO | MUL | 0 | |
| translate | int(11) | NO | MUL | 0 | |
| downgrade | int(11) | NO | | 0 | |
+-----------+------------------+------+-----+---------+----------------+
describe field_data_field_related_books;
+-------------------------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------------------+------------------+------+-----+---------+-------+
| entity_type | varchar(128) | NO | PRI | | |
| bundle | varchar(128) | NO | MUL | | |
| deleted | tinyint(4) | NO | PRI | 0 | |
| entity_id | int(10) unsigned | NO | PRI | NULL | |
| revision_id | int(10) unsigned | YES | MUL | NULL | |
| language | varchar(32) | NO | PRI | | |
| delta | int(10) unsigned | NO | PRI | NULL | |
| field_related_books_target_id | int(10) unsigned | NO | MUL | NULL | |
+-------------------------------+------------------+------+-----+---------+-------+
describe field_data_field_author_ref;
+----------------------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------------------+------------------+------+-----+---------+-------+
| entity_type | varchar(128) | NO | PRI | | |
| bundle | varchar(128) | NO | MUL | | |
| deleted | tinyint(4) | NO | PRI | 0 | |
| entity_id | int(10) unsigned | NO | PRI | NULL | |
| revision_id | int(10) unsigned | YES | MUL | NULL | |
| language | varchar(32) | NO | PRI | | |
| delta | int(10) unsigned | NO | PRI | NULL | |
| field_author_ref_target_id | int(10) unsigned | NO | MUL | NULL | |
+----------------------------+------------------+------+-----+---------+-------+
describe field_data_field_workid;
+------------------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+------------------+------+-----+---------+-------+
| entity_type | varchar(128) | NO | PRI | | |
| bundle | varchar(128) | NO | MUL | | |
| deleted | tinyint(4) | NO | PRI | 0 | |
| entity_id | int(10) unsigned | NO | PRI | NULL | |
| revision_id | int(10) unsigned | YES | MUL | NULL | |
| language | varchar(32) | NO | PRI | | |
| delta | int(10) unsigned | NO | PRI | NULL | |
| field_workid_target_id | int(10) unsigned | NO | MUL | NULL | |
+------------------------+------------------+------+-----+---------+-------+
describe field_data_field_onsaledate;
+------------------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+------------------+------+-----+---------+-------+
| entity_type | varchar(128) | NO | PRI | | |
| bundle | varchar(128) | NO | MUL | | |
| deleted | tinyint(4) | NO | PRI | 0 | |
| entity_id | int(10) unsigned | NO | PRI | NULL | |
| revision_id | int(10) unsigned | YES | MUL | NULL | |
| language | varchar(32) | NO | PRI | | |
| delta | int(10) unsigned | NO | PRI | NULL | |
| field_onsaledate_value | datetime | YES | | NULL | |
+------------------------+------------------+------+-----+---------+-------+
describe field_data_field_format;
+------------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+------------------+------+-----+---------+-------+
| entity_type | varchar(128) | NO | PRI | | |
| bundle | varchar(128) | NO | MUL | | |
| deleted | tinyint(4) | NO | PRI | 0 | |
| entity_id | int(10) unsigned | NO | PRI | NULL | |
| revision_id | int(10) unsigned | YES | MUL | NULL | |
| language | varchar(32) | NO | PRI | | |
| delta | int(10) unsigned | NO | PRI | NULL | |
| field_format_tid | int(10) unsigned | YES | MUL | NULL | |
+------------------+------------------+------+-----+---------+-------+
describe field_data_field_subjectcategories;
+-----------------------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------------+------------------+------+-----+---------+-------+
| entity_type | varchar(128) | NO | PRI | | |
| bundle | varchar(128) | NO | MUL | | |
| deleted | tinyint(4) | NO | PRI | 0 | |
| entity_id | int(10) unsigned | NO | PRI | NULL | |
| revision_id | int(10) unsigned | YES | MUL | NULL | |
| language | varchar(32) | NO | PRI | | |
| delta | int(10) unsigned | NO | PRI | NULL | |
| field_subjectcategories_tid | int(10) unsigned | YES | MUL | NULL | |
+-----------------------------+------------------+------+-----+---------+-------+
mysql의 실행 계획을보기 위해 'explain your_query_here'를 실행하십시오. –
마크 B, 그랬습니다. 위의 쿼리 바로 아래에 있습니다. – MrModus