我如何在没有任何联接的情况下优化大型MySQL表中的查询?

瑞安

如何从单个大型表(约7500万行)优化此单个查询?

SELECT
    log_id
FROM
    score
WHERE
    class_id IN (17,395)
ORDER BY date_reverse
LIMIT 10000;

我为一组特定的类提取了最新的10k记录,以便可以快速知道它们在较大的导入脚本中是否已经存在。

我认为我已经建立了适当的索引,但是此查询持续5-50秒!

需要帮助请叫我。

EXPLAIN
    SELECT
        log_id
    FROM
        score
    WHERE
        class_id IN (17,395)
    ORDER BY date_reverse
    LIMIT 10000;

*** row 1 ***
          table:  score
           type:  range
  possible_keys:  class_id,score_multi_2,class_id_date_reverse,score_multi_5
            key:  class_id_date_reverse
        key_len:  4
            ref:  NULL
           rows:  1287726
          Extra:  Using where; Using index; Using filesort

CREATE TABLE `score` (
  `log_id` bigint(20) NOT NULL,
  `profile_id` bigint(20) DEFAULT NULL,
  `date` datetime DEFAULT NULL,
  `class_id` int(11) NOT NULL,
  `score` float(10,6) DEFAULT NULL,
  `score_date` datetime DEFAULT NULL,
  `process_date` datetime DEFAULT NULL,
  `status_type_id` int(3) NOT NULL DEFAULT '0',
  `date_reverse` int(11) DEFAULT NULL,
  UNIQUE KEY `unique_key` (`log_id`,`class_id`),
  KEY `class_id` (`class_id`),
  KEY `profile_id` (`profile_id`),
  KEY `date` (`date`),
  KEY `score` (`score`),
  KEY `status_type_id` (`status_type_id `),
  KEY `status_type_id_date` (`status_type_id`,`date`),
  KEY `class_status_type_id_date_log_id` (`class_id`,`status_type_id`,`date`,`log_id`),
  KEY `date_reverse` (`date_reverse`),
  KEY `class_id_date_reverse` (`class_id`,`date_reverse`),
  KEY `date` (`date`),
  KEY `class_id_date_reverse_log_id` (`class_id`,`date_reverse`,`log_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
戈登·利诺夫

我的猜测是,运行此查询的最快方法是咬紧牙关,并允许对20,000行进行排序。我想到的查询是:

SELECT *
FROM ((SELECT log_id
       FROM score
       WHERE class_id = 17
       ORDER BY date_reverse
       LIMIT 10000
      ) UNION ALL
      (SELECT log_id
       FROM score
       WHERE class_id = 395
       ORDER BY date_reverse
       LIMIT 10000
      )
     ) s
ORDER BY date_reverse
LIMIT 10000;

对于此查询,您希望使用上的复合索引score(class_id, date_reverse, log_id)每个子查询都应该非常有效地使用该索引。但是,最终排序将需要使用文件排序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在没有任何关系的情况下从2个表联接数据?

来自分类Dev

Codeigniter中如何在没有条件的情况下选择联接多个表?

来自分类Dev

symfony2如何在没有任何令牌表的情况下记住我?

来自分类Dev

在没有任何键/索引信息的情况下更新大型MySQL表

来自分类Dev

在没有任何键/索引信息的情况下更新大型MySQL表

来自分类Dev

如何在没有日历表的情况下向MySQL查询添加天空白

来自分类Dev

在b中没有function(a)的情况下如何联接表

来自分类Dev

如何在没有任何查询的情况下更改SQL上的SSMS警告设置?

来自分类Dev

PostgreSQL如何在没有任何条件的情况下从表中删除前几条记录?

来自分类Dev

MySQL如何在没有公用键的情况下联接3个表

来自分类Dev

如何在没有Hibernate生成任何表的情况下使用Hibernate Envers(@Audited)

来自分类Dev

如何在没有任何换行符的情况下查找 MySQL 记录?

来自分类Dev

如何在没有任何循环语句的情况下获取数组中多个文件的值

来自分类Dev

如何在没有任何NuGet软件包的情况下折叠Blazor中的DIV

来自分类Dev

如何在没有任何循环的情况下获取php中的特定键数组

来自分类Dev

如何在Python中没有任何模块的情况下求解方程?

来自分类Dev

我如何在没有临时表的情况下在Postgresql中执行成本最低的路由查询?

来自分类Dev

我如何在没有 Stod() 的情况下重写

来自分类Dev

如何在没有uri的情况下将查询传递给rest模板中的url

来自分类Dev

如何在没有数据库查询的情况下删除gridview中的行

来自分类Dev

在没有两个查询的情况下如何在Knex中执行此操作

来自分类Dev

如何在没有集合的情况下从列表中查询一个对象?

来自分类Dev

如何在没有路径的情况下查询嵌套文档中的值?

来自分类Dev

如何在不知道列名的情况下从 mysql 查询中检索表行?

来自分类Dev

我们如何在没有任何JavaScript的情况下在QML中声明枚举?

来自分类Dev

如何在没有阻塞循环的情况下读取节点js中的大型二进制文件?

来自分类Dev

如何在Android中没有意图且没有任何视图窗口的情况下拍照

来自分类Dev

如何在Android中没有意图且没有任何视图窗口的情况下拍照

来自分类Dev

如何在MySQL中没有孩子的情况下选择所有条目

Related 相关文章

  1. 1

    如何在没有任何关系的情况下从2个表联接数据?

  2. 2

    Codeigniter中如何在没有条件的情况下选择联接多个表?

  3. 3

    symfony2如何在没有任何令牌表的情况下记住我?

  4. 4

    在没有任何键/索引信息的情况下更新大型MySQL表

  5. 5

    在没有任何键/索引信息的情况下更新大型MySQL表

  6. 6

    如何在没有日历表的情况下向MySQL查询添加天空白

  7. 7

    在b中没有function(a)的情况下如何联接表

  8. 8

    如何在没有任何查询的情况下更改SQL上的SSMS警告设置?

  9. 9

    PostgreSQL如何在没有任何条件的情况下从表中删除前几条记录?

  10. 10

    MySQL如何在没有公用键的情况下联接3个表

  11. 11

    如何在没有Hibernate生成任何表的情况下使用Hibernate Envers(@Audited)

  12. 12

    如何在没有任何换行符的情况下查找 MySQL 记录?

  13. 13

    如何在没有任何循环语句的情况下获取数组中多个文件的值

  14. 14

    如何在没有任何NuGet软件包的情况下折叠Blazor中的DIV

  15. 15

    如何在没有任何循环的情况下获取php中的特定键数组

  16. 16

    如何在Python中没有任何模块的情况下求解方程?

  17. 17

    我如何在没有临时表的情况下在Postgresql中执行成本最低的路由查询?

  18. 18

    我如何在没有 Stod() 的情况下重写

  19. 19

    如何在没有uri的情况下将查询传递给rest模板中的url

  20. 20

    如何在没有数据库查询的情况下删除gridview中的行

  21. 21

    在没有两个查询的情况下如何在Knex中执行此操作

  22. 22

    如何在没有集合的情况下从列表中查询一个对象?

  23. 23

    如何在没有路径的情况下查询嵌套文档中的值?

  24. 24

    如何在不知道列名的情况下从 mysql 查询中检索表行?

  25. 25

    我们如何在没有任何JavaScript的情况下在QML中声明枚举?

  26. 26

    如何在没有阻塞循环的情况下读取节点js中的大型二进制文件?

  27. 27

    如何在Android中没有意图且没有任何视图窗口的情况下拍照

  28. 28

    如何在Android中没有意图且没有任何视图窗口的情况下拍照

  29. 29

    如何在MySQL中没有孩子的情况下选择所有条目

热门标签

归档