【问题标题】:How to handle millions of records in mysql and laravel如何处理 mysql 和 laravel 中的数百万条记录
【发布时间】:2019-03-31 19:55:24
【问题描述】:

如何在 MySQL 只读操作中处理超过 1000 万条记录。 我有两张表,一张是company,它保存着公司的记录,即它的名称和它提供的服务,因此有 2 列,大约有 300 万条记录,另一张表 employee 有大约 40 列和大约 1000 万条记录。在尝试获取数据时,即使是简单的查询,例如

Employee::paginate(100);
//In terms of mysql it
//select count(*)  as aggregate from 'employee'; 
//Select *  from 'employee' limit 100 offset 0;

过去需要大约 30 秒,现在需要永远。

如果我想进行搜索、应用过滤器或想加入两个表,即companyemployee,那么有时它会工作,有时它会崩溃并在 SQL 服务器日志中给出大量错误/警告。 谁能告诉我如何在不导致 SQL 服务器崩溃的情况下更有效地处理大量记录,尤其是在高流量时间期间。 目前,我只有主键,即 id 和联合 id 被索引。

与在 SO 上进行的所有类似查询相比,这是一种重复的帖子,但这些对我没有多大帮助。

我在 SO 上关注的问题

  1. Best data store for billions of rows
  2. Handling very large data with mysql
  3. https://dba.stackexchange.com/questions/20335/can-mysql-reasonably-perform-queries-on-billions-of-rows
  4. Is InnoDB (MySQL 5.5.8) the right choice for multi-billion rows?
  5. How big can a MySQL database get before performance starts to degrade
  6. Handling millions of records in arrays from MySQL in PHP?

【问题讨论】:

  • 'employee' 是一个字符串,因此您的示例查询没有多大意义
  • @Strawberry 我正在使用雄辩的 ORM 。所以我没有直接使用原始 sql 查询。我写这个只是为了让你知道这个雄辩的查询会变成什么。

标签: php mysql laravel eloquent


【解决方案1】:

进行这些更改:

【讨论】:

  • 我会尝试使用partitioning ,但我认为它不会有太大帮助,因为所有记录都在一天内上传。不能使用simplePaginate,因为我想显示搜索或过滤器和分页的记录总数。
  • 分区可以在各种条件下完成。但这取决于您的查询。我个人是根据日期申请的,因为我所有的查询都取决于日期。它对我有很大帮助。您可以实现自定义分页。您可以使用 redis 在不同条件下保存数据计数。例如employees.it.male = 30employees.it.female = 30employees.it.total = 60,在 IT 部分添加新男性员工时,只需增加 employees.it.male 值。然后在按部门和性别进行过滤时,您可以使用这些值来获取记录总数。
猜你喜欢
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
  • 2012-10-21
  • 2017-12-01
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多