php - PDO 查询运行缓慢
问题描述
我已经查看并尝试了许多不同的解决方案,但似乎都没有奏效。我正在运行以下查询以从 100k 表中获取结果:
SELECT * FROM (SELECT expenses.id AS eID, expenses.date,
expenses.receipt, expenses.purpose, expenses.date_submitted,
expenses.expense_type, expenses.description,
expenses.curr_used,expenses.reimbursement_amount,
expenses.hst_amount, expenses.amex_amount, expenses.gl_acct,
expenses.net_amount,expenses.status, users.id AS uID,
users.firstname, users.lastname, users.department,
users.adminship_level, users.is_finance
FROM expenses
INNER JOIN users on expenses.user_id = users.id
) as expense_info
WHERE (
(department="Publishing"
AND adminship_level < 4)
OR uID=8
)
ORDER BY date_submitted DESC
LIMIT 15
费用表是一个有 100k 行的表,而用户表有 500 个用户。
用户表通过 user_id 上的外键与费用相关联,并且还包含部门+管理级别的复合索引。
解释产生以下结果
使用 MySQL Workbench 运行此程序运行良好且速度非常快。然而,将完全相同的查询放入 php 并使用 PDO 的 prepare() + execute() 函数需要 6 整秒来获取 15 个结果。
关于如何提高速度的任何想法?我究竟做错了什么?
我正在使用 XAMPP,但没有 MariaDB(我使用的是 MySQL 8)
请询问可能有帮助的额外详细信息,我会提供
解决方案
嗯,
SELECT e.id eID
, e.date
, e.receipt
, e.purpose
, e.date_submitted
, e.expense_type
, e.description
, e.curr_used
, e.reimbursement_amount
, e.hst_amount
, e.amex_amount
, e.gl_acct
, e.net_amount
, e.status
, u.id uID
, u.firstname
, u.lastname
, u.department
, u.adminship_level
, u.is_finance
FROM expenses e
JOIN users u
ON e.user_id = u.id
WHERE (u.department = "Publishing" AND u.adminship_level < 4)
OR uID=8
ORDER
BY e.date_submitted DESC
LIMIT 15
推荐阅读
- react-native - 使用 amazon chime 集成到现有 react-native 项目时导入 NativeMobileSDKBridgePackage 时出错
- git - Git 太大,无法上传到 github。除master外的所有分支都被删除,所有文件都被清除
- c++ - 如何复制具有虚拟基类的模板化实例?
- c - 在 Windows 上的文件结束之前到达 EOF
- angular - provideIn:在库中复制的“根”服务
- python - 如何将基于类的视图的上下文传递给 Django 中的模板?
- debugging - 什么定义了 Cloud Run 容器实例日志的日志类型(默认、警报、错误、关键等)?
- keras - 使用 RNN,我们如何预测货币价格以在给定时间段内达到特定价格?
- python - 如何使用 AutoKeras 获得可重现的结果
- java - 当我使用 Intents for Android Studio 时,我没有弹出“包上下文”