mysql - 这个 mysql 查询有什么问题? (Whmc)

标签 mysql sql performance

此查询在 php 应用程序中加载需要很长时间。事实上,它根本没有加载。
tblinvoices 大约有 17k 个条目。

SELECT * 
FROM `tblinvoices` 
WHERE NOT EXISTS ( 
  SELECT * 
  FROM `tblinvoiceitems` 
  WHERE `tblinvoiceitems`.`invoiceid` = `tblinvoices`.`id` 
    AND `type` IN ( 'Invoice' ) 
) AND `status` = 'Unpaid' 
  AND `userid` = '19830'

我可以在服务器端(Mysql 配置)做些什么来使这个查询运行得更快吗?

期待您的想法

最佳答案

这是一个很难回答的问题,因为有很多变量(您提到了 PHP),而且我们不知道您正在运行的服务器实例的大小,更不用说其他服务等了。

17k 是不运行的极少数记录,但您会遇到很多瓶颈。

第一步是将 PHP 从等式中删除。只需在 MySQL CLI 中尝试即可。

您是否尝试过在具有较小数据集的测试数据库上运行相同的查询?

由于您的应用程序已编码,因此很难标准化您的数据库,但您仍然可以对查询运行 EXPLAIN,并且只要您有权访问数据库,您就可以根据需要添加和删除索引。

尝试添加以下索引...

CREATE INDEX idx_invoices_user_status ON tblinvoices(status,userid);

还有...

CREATE INDEX idx_invoiceitems_invoiceid_type ON tblinvoiceitems(invoiceid,type);

如果索引是问题所在,我会感到惊讶,但值得一试......

关于mysql - 这个 mysql 查询有什么问题? (Whmc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49639501/

相关文章:

java - 如何正确处理连接空闲超时错误

sql - 如何更改 "WHERE startdate >= date"子句的值并获取日期范围内的数据?

java - Java 中搜索和排序算法的高效实现

visual-studio-2010 - SendMessage 和 PostMessage 哪个更好用?

mysql - 检查Mysql查询中3个不同日期范围内的值

MySQL:尝试在时间戳中插入值会引发错误

mysql - Laravel 到 MySQL 查询连接计时日志记录

mysql - SQL LIKE 是否迭代表的每一行

php - 从表中选择逗号分隔的记录

c++ - fstream.write() 卡住了很长时间?