此查询在 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/