gpt4 book ai didi

php - 查询中的连接函数使查询运行速度变慢

转载 作者:可可西里 更新时间:2023-11-01 08:23:37 24 4
gpt4 key购买 nike

我有两个表都包含大约 200,000 条数据。我写了一个如下所示的查询来使用一些连接来检索数据。

这是我试过的查询

$dbYTD = DB::table('stdtsum as a')
->join(DB::raw("(select distinct s_id, c_cod, compid from stdcus) b"), function($join){
$join->on('a.compid', '=', 'b.compid')->on('a.c_cod', '=', 'b.c_cod');
})
->select('b.s_id', DB::raw('sum(turnover) as sumturn'))
->whereBetween('date', [$startYTD, $endYTD])
->groupBy('b.s_id')
->get()
->toArray();

这个查询给出的结果是正确的,但是它花费的处理时间很长,有时甚至会超时。

谁能帮我优化这个查询?

最佳答案

您需要为应用连接条件的所有列编制索引。在你的情况下:你的两个表中都有“compid”,“c_cod”。

通常,"Primary Key constraint" 列会自动在数据库中建立索引,但您必须手动为"Foreign Key constraint" 列建立索引。

一些索引技巧:

  1. 首先在值的多样性最大的字段上创建索引。可以这么说,这将带来“最大的 yield ”。
  2. 保持索引小。最好只对邮政编码或邮政编码进行索引,而不是对邮政编码和国家/地区进行索引。索引越小,响应时间越好。
  3. 对于高频函数(每天数千次),拥有一个非常大的索引可能是明智的,因此系统甚至不需要用于读取函数的表。
  4. 对于小表,索引可能是不利的。对于系统通过扫描整个表格会更好的任何功能也可以这样说。

Remember that an index slows down additions, modifications and deletes because the indexes need to be updated whenever the table is. So, the best practice is to add an index for values that are often used for a search, but that do not change much. As such, an index on a bank account number is better than one on the balance.

提示引用:https://www.databasejournal.com/features/mysql/article.php/3840606/Maximizing-Query-Performance-through-Column-Indexing-in-MySQL.htm

关于php - 查询中的连接函数使查询运行速度变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53864555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com