mysql - 源为 Mysql 的报告速度更快

标签 mysql database-design relational-database bigdata

我们有一个Mysql Master Slave架构。我们有大约 1000 张 table 。我们数据库中的 5 或 6 个表每个大约 30 到 40 GB。我们不能将一个 30 GB 的表连接到另一个 30 GB 的表,因为它从不返回结果。

我们所做的:从一个表中选择所需的数据,然后在另一个表中以 block 的形式找到匹配的数据。这给了我们结果,但这很慢。

在以 block 的形式连接两个表之后,我们进一步处理这些表。我们根据用例使用了更多的连接。

当前数据库:架构:5 个主服务器,100 个从服务器。

<强>1。我们怎样才能让它更快?索引在这里不是问题,我们已经在使用它。

<强>2。我们是否需要一些大数据方法来更快地获得结果。

编辑:查询详情如下

Query select count(*) from A, B where A.id = B.uid;

表 A 30 GB,有 51 列。 id为主键,自增整数。

表 B 27 GB,有 48 列。 uid (int 11) 是非唯一索引。

使用MySql ISAM。

最佳答案

这是一个糟糕的查询。它要么

  1. 扫描所有A
  2. 对于每个 id,在 B 的索引中(随机地)查找 uid。

  1. 扫描B在uid上的所有索引
  2. 对于每个 uid,查找(随机)A 中的 id(在 PK 中,因此是数据)。

无论哪种情况,

  • A的30GB全部被触及
  • B 的大部分 uid 索引将被触及
  • 第 1 步将是线性扫描
  • 第 2 步将是随机探测,大概涉及大量 I/O。

如果查询,请解释意图;也许我们可以帮助您重新制定它以实现相同或相似的目的。

与此同时,您有多少 RAM? innodb_buffer_pool_size 的设置是什么?表是 InnoDB 吗?

查询最终会返回一个结果,除非某些“超时”终止了它。

idAUTO_INCREMENT 吗?还是 uid 是“UUID”? (UUID 会使性能变差,但有一些小技巧可以提供帮助。)

关于mysql - 源为 Mysql 的报告速度更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39313944/

相关文章:

mysql - 为 MySQL 中不断增长的表创建摘要表的最佳实践

laravel 一对一唯一约束

php - 初始化mysql目录报错

mysql - 不确定如何为上述任务构建 SQL 查询

MySQL getpolygon函数错误

php - Laravel 3 表关系

mysql - 是否可以存储冗余数据以防外表记录被删除

java - 如何在 hibernate/spring 中使用 LOCK IN SHARE MODE?

sql - 正或负 boolean 字段名称

php - 多个离线网页同步