php - 简单查询需要很长时间(~15 秒)
问题描述
我有以下查询和 php 代码:
$sql = "SELECT DISTINCT j.OrderID, DATE_FORMAT(j.StartDate,'%W %e %M %Y %H:%i:%s') AS StartDate,
j.Object, j.Signature, j.PrintedWithBSN, j.PrintedWithoutBSN,
p.ProjectID AS ProjectName, p.City, p.PostalCode, p.StreetName,
c.Name AS CustomerName
FROM JobOrder j
INNER JOIN Project p ON p.ProjectID = j.ProjectID
INNER JOIN Customer c ON c.CustomerID = p.CustomerID
INNER JOIN OrderEmployer oe ON j.OrderID=oe.OrderID
INNER JOIN Employer e ON oe.EmployerID=e.EmployerID
WHERE j.Removed = 0 AND Date(j.StartDate)=:StartDate
ORDER BY e.Firstname, p.WorkDone, j.Signature, j.StartDate DESC, c.Name";
$query = $database->prepare($sql);
$query->execute(array('StartDate' => $date));";
使用 microtime php 函数,我发现$query->execute
大约需要 15 秒才能完成。一年前,查询只需几秒钟即可执行。我无法弄清楚是什么导致了额外的等待时间,是我的查询编写错误吗?
--------编辑:我的解释结果:
--------Edit2:我的索引是(每个表):
- 客户:主键: CustomerID 唯一键:名称
- 雇主:主键: EmployerID 唯一键:用户名
- JobOrder:主键: OrderID 键: ProjectID
- OrderEmployer:主键: OrderID,EmployerID 键: EmployerID
- 项目主键: ProjectID键: CustomerID、ContactPersonID、ContactPersonProjectID
解决方案
通过遵循 Uueerdo 和 Barmar 的提示,我修复了较长的查询时间。通过简单地为 WHERE 子句使用的字段添加索引,我将查询时间减少到不到 0,1 秒(我什至看到了 0,00019192695617676 秒)!
推荐阅读
- apache-kafka-streams - 如何将 KStream 注入 Spring bean?
- html - 当单击指向同一组件的另一个链接时,queryParams 链接不会刷新
- javascript - 在输入组中引导 5 个浮动标签
- java - 如何使用适当的方法检查列表的属性是否为空?
- r - 下载 Button Shiny App - 如何修复错误“找不到功能”
- html - 如何将按钮移动到左侧?
- javascript - 如何将 GeoFirestore 与 React Native Firestore 一起使用?
- buffer - 协议缓冲区文件的未知开始
- c++ - 删除包含搜索词的行的问题
- css - Wordpress 主题自定义加载不正确