我的PHP代码中有这个查询命中MySQL 5.5数据库。此查询的目的是生成下一个发票号,因此我需要确保获取最大现有发票号并向其添加1。
诀窍是此引用(invoice#)列是varchar,因此用户可以输入字母数字字符,因此我的查询只需要查看数值。
select max(cast(t.reference as unsigned)) reference
from transactions t, families f
where t.familyid in (select id from families where companyid = 1415)
and t.familyid = f.id
and transactiontype = 'C'
and t.reference REGEXP '^[0-9]+$';
正如您所看到的,我正在使用正则表达式,因为我尝试做的是获取参考列中当前存在的最大数字,以便生成下一个发票编号。
当前查询需要2到8秒,直到它被缓存。有没有什么方法可以加快速度,或者它是否能达到最佳状态?
答案 0 :(得分:0)
请尝试这个,删除条款开销:
select max(cast(t.reference as unsigned)) reference
from transactions t, families f
where
t.familyid = f.id
and f.companyid = 1415
and t.transactiontype = 'C'
and t.reference REGEXP '^[0-9]+$';