Mysql + 大表 = 慢查询?

2023-12-07

我在 Mysql 上的大表上遇到一些性能问题: 该表有 3800 万行,大小为 3GB。 我想通过测试 2 列来选择: 我尝试了很多索引(每列一个索引,两列一个索引),但查询仍然很慢:如下所示,超过 4 秒才能获取 1644 行:

SELECT `twstats_twwordstrend`.`id`, `twstats_twwordstrend`.`created`, `twstats_twwordstrend`.`freq`, `twstats_twwordstrend`.`word_id` FROM `twstats_twwordstrend` WHERE (`twstats_twwordstrend`.`word_id` = 1001 AND `twstats_twwordstrend`.`created` > '2011-11-07 14:01:34' );
...
...
...
1644 rows in set (4.66 sec)

EXPLAIN SELECT `twstats_twwordstrend`.`id`, `twstats_twwordstrend`.`created`, `twstats_twwordstrend`.`freq`, `twstats_twwordstrend`.`word_id` FROM `twstats_twwordstrend` WHERE (`twstats_twwordstrend`.`word_id` = 1001 AND `twstats_twwordstrend`.`created` > '2011-11-07 14:01:34' );
+----+-------------+----------------------+-------+-----------------------------------------------------+-----------------------+---------+------+------+-------------+
| id | select_type | table                | type  | possible_keys                                       | key                   | key_len | ref  | rows | Extra       |
+----+-------------+----------------------+-------+-----------------------------------------------------+-----------------------+---------+------+------+-------------+
|  1 | SIMPLE      | twstats_twwordstrend | range | twstats_twwordstrend_4b95d890,word_id_created_index | word_id_created_index | 12      | NULL | 1643 | Using where |
+----+-------------+----------------------+-------+-----------------------------------------------------+-----------------------+---------+------+------+-------------+
1 row in set (0.00 sec)

mysql> describe twstats_twwordstrend;
+---------+----------+------+-----+---------+----------------+
| Field   | Type     | Null | Key | Default | Extra          |
+---------+----------+------+-----+---------+----------------+
| id      | int(11)  | NO   | PRI | NULL    | auto_increment |
| created | datetime | NO   |     | NULL    |                |
| freq    | double   | NO   |     | NULL    |                |
| word_id | int(11)  | NO   | MUL | NULL    |                |
+---------+----------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql> show index from twstats_twwordstrend;
+----------------------+------------+-------------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table                | Non_unique | Key_name                      | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+----------------------+------------+-------------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| twstats_twwordstrend |          0 | PRIMARY                       |            1 | id          | A         |    38676897 |     NULL | NULL   |      | BTREE      |         |               |
| twstats_twwordstrend |          1 | twstats_twwordstrend_4b95d890 |            1 | word_id     | A         |      655540 |     NULL | NULL   |      | BTREE      |         |               |
| twstats_twwordstrend |          1 | word_id_created_index         |            1 | word_id     | A         |      257845 |     NULL | NULL   |      | BTREE      |         |               |
| twstats_twwordstrend |          1 | word_id_created_index         |            2 | created     | A         |    38676897 |     NULL | NULL   |      | BTREE      |         |               |
+----------------------+------------+-------------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
4 rows in set (0.03 sec)

我还发现仅获取表中较远的一行非常慢:

mysql> SELECT `twstats_twwordstrend`.`id`, `twstats_twwordstrend`.`created`, `twstats_twwordstrend`.`freq`, `twstats_twwordstrend`.`word_id` FROM `twstats_twwordstrend` limit 10000000,1;
+----------+---------------------+--------------------+---------+
| id       | created             | freq               | word_id |
+----------+---------------------+--------------------+---------+
| 10000001 | 2011-09-09 15:59:18 | 0.0013398539559188 |   41295 |
+----------+---------------------+--------------------+---------+
1 row in set (1.73 sec)

...并且在表格开始时并不慢:

mysql> SELECT `twstats_twwordstrend`.`id`, `twstats_twwordstrend`.`created`, `twstats_twwordstrend`.`freq`, `twstats_twwordstrend`.`word_id` FROM `twstats_twwordstrend` limit 1,1;
+----+---------------------+---------------------+---------+
| id | created             | freq                | word_id |
+----+---------------------+---------------------+---------+
|  2 | 2011-06-16 10:59:06 | 0.00237777777777778 |       2 |
+----+---------------------+---------------------+---------+
1 row in set (0.00 sec)

该表使用Innodb引擎。如何加快大表的查询速度?


您可以做的主要事情是添加索引。

每当您在 where 子句中使用列时,请确保它有索引。您创建的栏目中没有该栏目。

包括创建的列的多重索引本质上不是创建的索引,因为创建的列不是多重索引中的第一个。

使用多索引时,您几乎应该始终将基数较高的列放在前面。因此,索引为:(created, word_id), (word_id)会给你带来显着的提升。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql + 大表 = 慢查询? 的相关文章

  • 同一配置文件上的两个不同提供程序

    我在用着实体框架 6 1 0 I have 2 家提供者 MysqlClient 和 SQLServerCE 我需要创建2个不同的DBContext 这迫使我创造2个配置类因为mysql有一些不同的东西 但是当我初始化应用程序时 Datab
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 在 MySQL 中存储表情符号的编码问题:如何使用 Prisma ORM 在 NodeJS 中定义字符排序规则?

    亲爱的 Nodejs 专家和数据库专家 我们在 MySQL 数据库中存储表情符号和其他特殊字符时遇到问题 我们使用 Prisma 得到一个错误 这是我们使用的 ORM 参数无法从排序规则 utf8 general ci 转换为 utf8mb
  • POINT 列上的 MySQL INSERT/UPDATE

    我正在尝试用我国家的地理位置填充我的数据库 我的一张表有 4 个字段 ID PK 纬度 经度和地理点 EDIT SCDBs Punto Geografico SET lat 18 469692 SET lon 63 93212 SET g
  • Galera 集群问题

    我想在我们的生产环境中使用Galera集群 但我有一些顾虑 每个表必须至少定义一个显式主键 每个表必须运行在InnoDB或XtraDB存储引擎下 分批处理您的大额交易 例如 不要让一个事务插入 100 000 行 而是将其分成更小的块 例如
  • 如何在mysql中选择具有相同值集的列?

    我的桌子是 patients pid name city disease did dname has disease did pid 我想列出具有相同疾病组的患者 pid 和 did 分别是患者和疾病表中的主键 并且是 has diseas
  • 如果没有找到值,如何让 MySQL 中的 SUM 函数返回“0”?

    假设我在 MySQL 中有一个简单的函数 SELECT SUM Column 1 FROM Table WHERE Column 2 Test 如果没有条目Column 2 包含文本 Test 然后该函数返回NULL 而我希望它返回 0 我
  • 如何优化这个MySQL慢(非常慢)查询?

    我有一个 2 GB 的 mysql 表 包含 500k 行 我在没有负载的系统上运行以下查询 select from mytable where name in n1 n2 n3 n4 bunch more order by salary
  • MySQL 和 Hibernate 之间的主键自增由谁负责?

    MySQL CREATE TABLE role id role INT 11 unsigned NOT NULL AUTO INCREMENT PRIMARY KEY id role AUTO INCREMENT 1 休眠 Entity p
  • MySQL 通过 current_timestamp 选择上个月的数据

    直到今天 当我使用 MySQL 并需要对日期 时间执行操作时 我使用带有 unix 时间戳的 int 列 没有出现任何问题 但今天在阅读了一些指南后 我决定默认使用 current timestamp 测试时间戳列 所以我感兴趣如何按列选择
  • PHP 和 MySQL - 高效处理多个一对多关系

    我正在寻求一些有关使用 MySQL 和 PHP 检索和显示数据的最佳方法的建议 我有 3 个表 所有一对多关系如下 Each SCHEDULE有很多覆盖每个覆盖都有很多地点 我想检索这些数据 以便它可以全部显示在单个 PHP 页面上 例如列
  • 什么时候应该使用 C++ 而不是 SQL?

    我是一名 C 程序员 偶尔使用 MySQL 来处理数据库 但我的 SQL 知识相当有限 但我肯定愿意改变这一点 目前 我正在尝试仅使用 SQL 查询对数据库中的数据进行分析 但我准备放弃了 转而将数据导入到C 中 用C 代码进行分析 我和同
  • 错误代码:1305。函数或过程不存在

    因此 我在 MySQL 中创建一个函数 然后尝试向用户授予使用该函数的权限 但我无法这样做 这就是我正在做的 DELIMITER USE rxhelp36 scbn DROP FUNCTION IF EXISTS businessDayDi
  • MySQL 错误 1172 - 结果包含多行

    在存储过程中运行查询时 我从 MySQL 收到此错误 错误代码 1172 结果包含多行 我理解错误 我正在做一个SELECT INTO var list 因此查询需要返回单行 当我使用LIMIT 1 or SELECT DISTINCT 错
  • 非常大的字段会对 MySQL 数据库产生负面影响吗?

    我目前正在使用 Django 构建一个网站 并希望托管用户生物样式页面 该页面可能长达几 KB 这些字段不一定需要搜索 但在查找用户名时确实需要提供 将这些数据存储在数据库中会产生负面影响吗 如果我使用带有数据库链接的静态文本文件 我的服务
  • 在 jQuery AJAX 成功中从 MySql 获取特定响应

    好吧 我有这个 ajax 代码 它将在 Success 块中返回 MySql 的结果 ajax type POST url index php success function data alert data My Query sql SE
  • ORDER BY 字段内的 MySQL 子查询。 (没有内连接)

    有很多与此相关的问题 但都具有使用内部联接的相同答案 这 我认为 在这里是不可能的 如果我错了请告诉我 我现在正在做的是调用两个不同的 mysql 查询来获取结果 它工作完美 db gt query SELECT FROM meta WHE
  • 如何检测Mysql/innodb中的死锁?

    我知道在 Innodb 中使用事务时不可避免地会发生死锁 并且如果应用程序代码正确处理死锁 它们是无害的 正如手册所说 只需再试一次 所以我想知道 如何检测死锁 死锁是否会发出一些特殊的 mysql 错误号 如果重要的话 我正在使用 PHP
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • 在 android 中建立与 MySQL 的池连接

    我需要从我的 Android 应用程序访问 MySQL 数据库 现在所有的工作都通过 DriverManager getConnection url 等等 但我必须从多个线程访问数据库 所以我必须使用连接池 问题1 是 com mysql

随机推荐

  • Python Pip 安装版本错误

    我知道这个问题以前曾被问过 但我的问题有点不同 我安装了 pip2 7 并工作 安装了 pip3 4 并工作 使用我的 Python 2 7 和 3 4 版本 但我的 pip2 7 安装在错误的目录中 它安装在 3 4 文件夹中 正如您所看
  • iOS 10 如何设置 UNotificationContent threadIdentifier 进行远程通知

    TL DR 需要在 APNs 通知负载 JSON 中设置什么键来对应threadIdentifier的财产UNNotificationContent目的 例如这 category 键对应于categoryIdentifier财产 iOS 1
  • 使用 libx11 截屏

    我目前正在尝试使用 libx11 截屏 include
  • Ruby 中的 count 方法如何工作?

    我很难理解以下代码段Ruby 文档 a hello world a count lo gt 5 a count lo o gt 2 a count hello l gt 4 a count ej m gt 4 hello world cou
  • 无效的目标版本:推送 Heroku 存储库时为 12

    每当我发生错误时git push heroku master这就是错误 无法在项目后端执行目标 org apache maven plugins maven compiler plugin 3 8 1 compile default com
  • 如何从shopee网站抓取商品?

    我尝试使用 python 来获取产品信息 如名称和价格 但这一次不起作用 即使我通过网络浏览器程序员模式检查html代码来获取类名并尝试使用这个名称来获取我想要的任何东西 但我得到的结果是这样的 我找不到任何项目 class col xs
  • Java 8 中字符串使用多少内存?

    我最近读了很多关于字符串内存分配的文章 但找不到任何与 Java 8 相同的细节 一个String需要多少内存空间 Alexandru Tanasescu 在Java 8中使用 我用的是64位版本 Java7 或更低版本 最小字符串内存使用
  • 在spark-shell中将行拆分为多行

    我已将数据导入到 Spark shell 中的 Spark DataFrame 中 数据填充如下 Col1 Col2 Col3 Col4 A1 11 B2 a b 1 0xFFFFFF A1 12 B1 2 A2 12 B2 0xFFF45
  • Android 使用哪种 HttpURLConnection 实现?

    我正在寻找实际的代码实现connect disconnect in java net URLConnection java java net HttpURLConnection java 在下面的链接中 connect 和disconnec
  • 替换所有地方的字符串,除非它在引号内

    我想全部更换 by D 除非它们在引号内 示例1 Hey man D how re you My friend told me this can t be true 变成 Hey man D how re you D My friend t
  • 需要一个好的正则表达式将 URL 转换为链接,但保留现有链接

    我有大量用户提交的内容 它是 HTML 并且可能包含 URL 其中一些将是 a 已经 如果用户很好 但有时用户很懒 只输入 www something com 或最多http www something com 我找不到合适的正则表达式来捕
  • 如何在剑道日期选择器中将过去的日期显示为禁用日期

    嗨我正在使用Kendo Angular UI 的 Kendo 日期选择器 我使用日期选择器的 min 和 max 属性来限制用户从特定的日期范围中进行选择 但这完全隐藏了超出范围的日期 就像这样 相反 我想将它们显示为禁用状态 就像 2 月
  • WPF DatePicker:什么是最好的? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我需要一个用于 WPF 应
  • R Markdown / rmarkdown 中的回归表 (html/pdf)

    出于发布的目的 我经常需要我的作品的 PDF 和 HTML 版本 包括回归表 并且我想使用 R Markdown 对于 PDF 来说stargazer和texreg包装可以制作出精美的桌子 现在 在尝试生成同样有吸引力的 HTML 输出时
  • 可变大小的对象可能无法初始化

    我有一堂这样的课 class aClass public aClass N 5 void aMemberFunction int nums N 1 2 3 4 5 private const int N 测试代码是 int main aCl
  • Pyqt 选项卡就像 Google Chrome 中一样

    我想让我的 pyqt 应用程序在菜单栏中有选项卡 就像 Google Chrome 一样 有关如何做到这一点的任何建议或简单示例 我确实找到了这些相关链接 http ivan fomentgroup org blog 2009 03 29
  • C++:路由到成员函数的静态函数包装器?

    我尝试了各种设计方法来解决这个问题 但我似乎无法做到正确 我需要公开一些静态函数以用作 C 库的回调函数 但是 我希望实际实现是非静态的 因此我可以使用虚函数并重用基类中的代码 例如 class Callbacks static void
  • 软件自动更新

    我们正在用 C 开发一个基于 Windows 的应用程序 我想为软件提供自动更新 事实上 一旦用户运行该程序 它应该能够通知用户它将从服务器获取最新版本 我们已经使用 Visual Studio 安装程序创建器创建了我们的安装程序 然后软件
  • 将 Flask 请求注入另一个 Flask 应用程序

    有没有办法将 Flask 请求对象注入到不同的 Flask 应用程序中 这就是我想做的 app flask Flask name app route foo
  • Mysql + 大表 = 慢查询?

    我在 Mysql 上的大表上遇到一些性能问题 该表有 3800 万行 大小为 3GB 我想通过测试 2 列来选择 我尝试了很多索引 每列一个索引 两列一个索引 但查询仍然很慢 如下所示 超过 4 秒才能获取 1644 行 SELECT tw