當IN或NOT IN的條件非常大時,我的應用程序中出現內存不足異常。我想知道這是什麼限制。什麼是MySQL中的IN和NOT IN的大小限制
9
A
回答
7
也許你會更好用另一種方式來完成您的查詢?
我建議你將匹配值加載到單列表中,然後將正在查詢的列內部連接到新表中的單列。
不是
SELECT a, b, c FROM t1 WHERE d in (d1, d2, d3, d4, ...)
建立一個臨時表1列,把它稱爲 「DVAL」
dval ---- d1 d2 d3
SELECT a, b, c FROM t1
INNER JOIN temptbl ON t1.d = temptbl.dval
4
不必問有關限制或者做一個SQL查詢或數據庫設計的時候是一個很好的指標,表明你做錯了。
0
我已經使用IN與相當大的ID列表 - 我懷疑內存問題不在查詢本身。你如何檢索結果?
該查詢,例如是從活動網站:
SELECT DISTINCT c.id, c.name FROM categories c
LEFT JOIN product_categories pc ON c.id = pc.category_id
LEFT JOIN products p ON p.id = pc.product_id
WHERE p.location_id IN (
955,891,901,877,736,918,900,836,846,914,771,773,833,
893,782,742,860,849,850,812,945,775,784,746,1036,863,
750,763,871,817,749,838,986,794,867,758,923,804,733,
949,808,837,741,747,954,939,865,857,787,820,783,760,
911,745,928,818,887,847,978,852
) ORDER BY c.name ASC
我的代碼第一遍是極其幼稚和有這些疑問的約10在單頁上,並且數據庫不眨眼。
當然,你可以運行一個100k值的列表,這完全是一個不同的故事。
0
我不知道限制是什麼,但我也遇到過這個問題。我不得不重寫我的查詢是這樣的:
select * from foo
where id in (select distinct foo_id from bar where ...)
2
我只用並不處於當條件是非常小(在100行左右)。它在這些情況下表現良好。當條件很大時,我使用OUTER JOIN,因爲查詢不必爲每個元組查找「IN」條件。你只需要檢查你想要所有行來自哪個表。
對於 「IN」 連接條件IS NOT NULL
對於 「NOT IN」 連接條件IS NULL
例如
/* Get purchase orders that have never been rejected */
SELECT po.*
FROM PurchaseOrder po LEFT OUTER JOIN
(/* Get po's that have been rejected */
SELECT po.PurchaesOrderID
FROM PurchaseOrder po INNER JOIN
PurchaseOrderStatus pos ON po.PurchaseOrderID = pos.PurchaseOrderID
WHERE pos.Status = 'REJECTED'
) por ON po.PurchaseOrderID = por.PurchaseOrderID
WHERE por.PurchaseOrderID IS NULL /* We want NOT IN */
0
I「具有類似的問題,但只允許通過100點3位數的ID在我的IN子句米當我看到堆棧跟蹤,它實際上IN子句中切斷逗號分隔值。我不」如果它的相關,我使用symfony框架...我檢查看它是否是一個推動問題,但只是想看看它是否可能是sql
相關問題
- 1. 什麼是MySQL中的「point-in-select」?
- 2. Mysql IN條件限制
- 3. 什麼是NSdocumentdirectory的限制大小?
- 4. 什麼是? in?char
- 5. in()...它是做什麼的?
- 6. mysql中的'IN'運算符中是否存在數值限制?
- 7. in Hbase,儘量減少行和列的大小,爲什麼?
- 8. 語法和IN(每個)而不是MySQL中的IN(或)問題
- 9. IN小數值的mysql
- 10. 什麼是ios中的sqlite的最大大小限制
- 11. MYSQL GROUP_CONCAT和IN
- 12. 什麼是Android APK大小限制(不是市場限制)?
- 13. MySQL:對「IN」子句的條目是否有限制?
- 14. 限制mysql表的大小
- 15. Renderscript,`in`參數是什麼?
- 16. 什麼是res:// */in .net?
- 17. 是什麼意思「!」 in require.js
- 18. 什麼是reader.getPageRotation()in iTextSharp.text.pdf
- 19. 什麼是.css in css?
- 20. 什麼是PREMERGED dll in .net
- 21. 在mySQL中IN/NOT IN的使用
- 22. 的MySQL還不支持限制和IN/ALL/ANY/SOME
- 23. 的MySQL還不支持 '限制和IN/ALL/ANY/SOME子查詢'
- 24. mysql中in函數的反義詞是什麼?
- 25. MYSQL和IN的請求
- 26. MySQL的GROUP_CONCAT + IN()= :-(
- 27. MySQL的WHERE IN()
- 28. apcluster in R:內存限制
- 29. In-和In TextMate.app
- 30. 什麼樣的For-In循環是?
謝謝你,我們也計劃同樣的解決方案,但在現有的安裝中添加一個新表需要一些額外的驗證和時間 - 因此作爲一個臨時解決辦法,我們想分割查詢。 – 2009-01-19 04:19:22
我不記得mber肯定,但我會認爲臨時表不需要很多權限,因爲它臨時發生在tempdb中。但在短期內,我認爲循環您所確定的是可接受的參數計數是可行的。 – dkretz 2009-01-19 04:46:19
或者,如果您一次都需要它們,則可以對多個語句執行UNION。 – dkretz 2009-01-19 04:47:34