【发布时间】:2021-07-07 07:00:46
【问题描述】:
我有一个查询连接 3 个销售表,大约有 15000 行。查询大约需要 22 秒才能响应,这对我来说太大了。如何优化此查询?我使用 Laravel 并使用表单中的过滤器。
这是我的查询:
$data = DB::table('crm_donhang as dh')
->select('dh.id as id', 'madh', 'dh.created_at as ngaybg', 'ngayxn', 'dh.trangthai', 'dh.createdby as nhanvienbh', 'tongtien', 'dh.updated_at', 'dh.updatedby',
'ngayyc', 'tenkhachhang', 'tenloai', 'loaidiachi', 'dh.danhgia', 'dh.nguyennhan')
->join(DB::raw('(SELECT id_donhang, masp FROM crm_donhang_ct as ct INNER JOIN crm_sanpham as sp ON sp.id=ct.id_sanpham) as ctdh'), 'ctdh.id_donhang', '=', 'dh.id')
->join('crm_khachhang as kh', 'kh.id', '=', 'dh.id_khachhang')
->join('crm_cfg_loaidh as ldh', 'ldh.id', '=', 'dh.id_loaidh')
->join('crm_cfg_dcgiaohang as dc', 'dc.id', '=', 'dh.id_dcgiaohang')
->get();
我有一个旧数据库,我在尝试查询 0.5 秒后将 crm_sanpham 表复制到其中,而在新数据库中则需要 4.7 秒。发生了什么? (虽然两张表是一样的,但是安装的数据库是一样的)。
select `id`, `masp`, `ketcau`, `mota`, `donvitinh`, `dongia`, `trangthai`, `created_at`, `updated_at`, `createdby`, `updatedby`
from `crm_sanpham` where `masp` != "TANDUNG" order by `masp` desc limit 10 offset 0
【问题讨论】:
-
请分享更多详细信息,例如该查询的执行计划以及您解决问题的尝试
-
如果你的记录再高,它会很慢。
-
是我从 sql 开始的。
标签: mysql laravel laravel-query-builder