SQL查询优化与NOT IN语句
请帮我优化这个查询:SQL查询优化与NOT IN语句
$result = mysql_query('
SELECT DISTINCT caseNumber
FROM master_break
WHERE invoiceNumber='$invoice'
AND bay='$bay' AND caseNumber
NOT IN(SELECT DISTINCT caseNumber
FROM shipped_data
WHERE status='' AND bay='$bay')
ORDER BY caseNumber ASC");
感谢。
DISTINCT
意味着对于每个记录添加到结果集,MySQL有添加记录之前检查其存在的整个集合。这意味着它有一个O(n^2)来插入。当在IN
条款中使用它时,这可能意味着您要增加更多的工作以实现零收益。试试这个代替:
SELECT DISTINCT caseNumber
FROM master_break
WHERE invoiceNumber='$invoice'
AND bay='$bay'
AND caseNumber NOT IN(
SELECT caseNumber
FROM shipped_data
WHERE status='' AND bay='$bay')
ORDER BY caseNumber ASC
显然索引case_Number on shipped_data和bay两者。
亲爱的cwallenpoole,我更新了上面提到的索引..感谢它工作正常,速度更快..请解释索引在这里工作的方式 –
索引是快捷方式让您的查询运行得更快,将它们视为真正的快速查找表 – cwallenpoole
可以将所有列作为索引,我如何选择列进行索引 –
SELECT DISTINCT caseNumber
FROM master_break
LEFT JOIN shipped_data ON master_break.caseNumber = shipped_data.caseNumber
WHERE invoiceNumber='$invoice'
AND master_break.bay='$bay'
AND shipped_data.status !=''
AND shipped_data.bay !='$bay'
ORDER BY caseNumber ASC
'''最后来自哪里? – Amy