Php 如何在mysql和laravel中处理数百万条记录
如何在MySQL只读操作中处理超过1000万条记录。 我有两个表,一个是Php 如何在mysql和laravel中处理数百万条记录,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,如何在MySQL只读操作中处理超过1000万条记录。 我有两个表,一个是公司,它保存公司的记录,即公司名称和提供的服务,因此有两列,大约有300万条记录,另一个是员工,大约有40列,大约有1000万条记录。在尝试获取数据时,即使是简单的查询,如 Employee::paginate(100); //In terms of mysql it //select count(*) as aggregate from 'employee'; //Select * from 'employee' l
公司
,它保存公司的记录,即公司名称和提供的服务,因此有两列,大约有300万条记录,另一个是员工
,大约有40列,大约有1000万条记录。在尝试获取数据时,即使是简单的查询,如
Employee::paginate(100);
//In terms of mysql it
//select count(*) as aggregate from 'employee';
//Select * from 'employee' limit 100 offset 0;
过去需要30秒,现在需要一辈子
如果要执行搜索、应用筛选器或要联接两个表,即公司
和员工
,则有时它会工作,有时会崩溃,并在SQL server日志中显示大量错误/警告。
有谁能告诉我如何更有效地处理这些记录,而不会导致SQL server崩溃,特别是在高流量时间。
目前,我只有主键,即ID和关节ID被索引
这是一种重复的帖子,相比之下,所有类似的查询都是如此,但这些并没有对我有多大帮助
我一直在问这些问题
进行以下更改:
- 根据需要在数据库中使用
。(例如)分区
- 使用
方法代替simplePaginate
。它不查询计数。()paginate
- 尝试改进您的
。它影响着我们。(谷歌:mysql索引最佳实践)索引
- 如果需要行数,请使用
驱动程序(如缓存
)redis
分区
,但我认为这不会有多大帮助,因为所有记录都是在一天内上传的。无法使用simplePaginate
,因为我想显示搜索或筛选器和分页的记录总数。分区可以在各种条件下完成。但这取决于你的疑问。我个人是根据日期申请的,因为我所有的疑问都取决于日期。这对我帮助很大。您可以实现自定义分页。您可以使用redis在不同条件下保存数据计数。例如employees.it.male=30
,employees.it.male=30
,employees.it.total=60
,在it部分添加新男性员工时,只需增加employees.it.male
值。然后,当按部门和性别进行筛选时,您可以使用这些值来获取记录总数。“employee”是一个字符串,因此您的示例查询不会产生太多的错误sense@Strawberry我正在使用雄辩的ORM。所以我没有直接使用原始sql查询。我写这篇文章只是想让大家知道这个雄辩的问题会变成什么。