我正在尝试优化我的MySQL查询以使其运行更平稳,但现在我陷入了困境。
我正在使用此查询:
SELECT
sr.path,
sr.keywordId,
sr.rank
FROM
serp_results sr
WHERE
sr.domain = 971
AND sr.searchEngine = 1
并且它试图从大约544,003,737行的表中获取结果。我最近为列searchEngine,domain添加了一个复合索引,但是没有用。
这是表结构:
| Field | Type | Null | Key | Default | Extra |
|-------------------|----------------------|------|-----|---------|----------------|
| id | bigint(10) unsigned | NO | PRI | | auto_increment |
| keywordId | int(10) unsigned | NO | MUL | | |
| searchEngine | tinyint(3) unsigned | NO | PRI | | |
| position | smallint(5) unsigned | NO | | | |
| rank | float unsigned | NO | | | |
| path | varchar(500) | NO | | | |
| domain | bigint(20) unsigned | YES | MUL | | |
| firstDomainResult | tinyint(1) unsigned | NO | | | |
| added | date | YES | MUL | | |
+索引:
| index_name | index_algorithm | is_unique | column_name | |
|------------------------------------|-----------------|-----------|------------------------------------|---|
| serp_results_searchEngine_domain | BTREE | FALSE | searchEngine,domain | |
| serp_results_domain_index | BTREE | FALSE | domain | |
| serp_results_added_index | BTREE | FALSE | added | |
| keywordId_searchEngine_position | BTREE | TRUE | keywordId,searchEngine,position | |
| domain_firstDomainResult_keywordId | BTREE | FALSE | domain,firstDomainResult,keywordId | |
| PRIMARY | BTREE | TRUE | id,searchEngine | |
EDIT:大量的域记录大约需要60秒钟以上的时间。
这就是为什么要花很长时间的原因。 (我将穿插一些问题以帮助确认我的陈述。)
innodb_buffer_pool_size
的值是什么。)PRIMARY KEY(id,searchEngine)
非常奇怪,因为id
为AUTO_INCREMENT
。 (你能证明这一点吗?)SHOW CREATE TABLE
;它比DESCRIBE
更具描述性。得到其中一些问题的答案;那么对于加速查询,我可能有具体的建议。