大数据表mysql查询优化

wlwcrazw  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(307)

我正试图优化mysql查询以使其运行更平稳,但现在我被卡住了。
我正在使用此查询:

SELECT
    sr.path,
    sr.keywordId,
    sr.rank
FROM
    serp_results sr
WHERE
    sr.domain = 971
    AND sr.searchEngine = 1

它试图从大约544003737行的表中得到结果。我最近添加了一个复合索引列搜索引擎,域,但它没有工作。
这是表结构:

| 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                    |   |

编辑:对于更多的域记录,它确实需要60多秒的时间。

4nkexdtk

4nkexdtk1#

这就是为什么要花很长时间(我会穿插一些问题来帮助确认我的陈述。)
你的table是innodb(是吗?)
您的ram比表小得多(表有多大,以gb为单位)?多少公羊?它的价值是什么 innodb_buffer_pool_size .)
662733行散落在table周围(或者这些行可能是按时间顺序聚集在一起的,有什么原因吗?)
您有一个旋转的hdd,或者您有一个或多个ssd驱动器(我认为这与我的讨论无关;但是你有哪一个?) PRIMARY KEY(id, searchEngine) 很奇怪,考虑到这一点 idAUTO_INCREMENT . (你能证明这一点吗?)
请提供 SHOW CREATE TABLE ; 它更具描述性 DESCRIBE .
你还有其他重要的问题吗(有时加快一个查询的速度会减慢其他查询的速度。这就是我想去的方向。告诉那些你不想让我慢下来的人。)
可以 domain 公正 INT ? (我也在考虑缩小table的尺寸。)
为什么超过60秒。。。662733行中有很大一部分需要从磁盘获取。
回答一些问题;那么我可能会有一个具体的建议来加速查询。

相关问题