mysql - 优化慢速查询以查找序列中的漏洞

标签 mysql sql

我有一个看起来像这样的表:

id | serial_number_basic | product_id
-------------------------------------

serial_number_basic 是一个流水号,每次需要新号码时都会累加。过去,可以将该数字的整个范围留空,下一个数字是 MAX() + 1

由于要求的变化,现在需要填补空洞。 serial_number_basic 当然取决于 product_id。每个产品都有自己的 serial_number_basics 序列。问题是找到漏洞。

这个查询确实根据每个 [productid] 找到了漏洞,但不幸的是它太慢了:

SELECT (
MIN( serial_number_basic ) + 1 
) as next_available_box
FROM (
SELECT DISTINCT t0.serial_number_basic, t1.serial_number_basic AS number_plus_one
FROM (SELECT * FROM conv WHERE product_id = [productid]) AS t0
LEFT JOIN
(SELECT * FROM conv WHERE product_id = [productid]) AS t1
ON t0.serial_number_basic + 1 = t1.serial_number_basic
) AS sub
WHERE number_plus_one IS NULL;

最佳答案

没有任何聚合,没有order-by,只是一个简单的外连接,试试:

SELECT MIN(c1.serial_number_basic) + 1
FROM conv c1
LEFT JOIN conv c2 
    ON c2.serial_number_basic = c1.serial_number_basic+1
    AND c2.product_id = c1.product_id
WHERE c1.product_id = 2
    AND c2.id IS null

关于mysql - 优化慢速查询以查找序列中的漏洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6708245/

相关文章:

MySQL 用 CASE 连接 4 个表

mysql - 在 MySql 查询中使用欧元符号

c# - File.ReadAllText OutOfMemoryException 异常

sql - 查询sqlalchemy中的多对多关系

mysql - SUM 列值与 group by aggregate 处理空值

Mysql If条件INNER JOIN

jquery - 当 session 超时到期时,将状态发送到数据库。 ASP.Net 和 Jquery

php - 在 2 个表中列出成员的所有内容(问题、答案)

ios - 如何在 fmdb 数据库中使用 limit 和 order by 子句来检索表数据?

SQL Where 子句 'that begins with' ?