当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. 对IN的限制()
- 4. 什么是mmap的大小限制
- 5. 响应大小的限制是什么?
- 6. 什么是NSdocumentdirectory的限制大小?
- 7. 什么是? in?char
- 8. in()...它是做什么的?
- 9. in Hbase,尽量减少行和列的大小,为什么?
- 10. mysql中的'IN'运算符中是否存在数值限制?
- 11. 什么是64b in和32b out的CRC?
- 12. #+:和#的含义是什么#::in common lisp
- 13. 语法和IN(每个)而不是MySQL中的IN(或)问题
- 14. MySQL索引的大小限制是什么意思?
- 15. IN小数值的mysql
- 16. SQL IN语句的限制
- 17. 什么是ios中的sqlite的最大大小限制
- 18. PL/SQL中的IN,OUT,IN OUT参数到底是什么
- 19. * in * ngFor in angular2中的含义是什么?
- 20. 什么是Resourcestring最大大小和最大数量限制?
- 21. 什么是Android程序大小限制?
- 22. 什么是UrlFetch邮政大小限制?
- 23. MYSQL GROUP_CONCAT和IN
- 24. 什么是Android APK大小限制(不是市场限制)?
- 25. 什么是reader.getPageRotation()in iTextSharp.text.pdf
- 26. Renderscript,`in`参数是什么?
- 27. 是什么意思“!” in require.js
- 28. 什么是PREMERGED dll in .net
- 29. in Rails 3什么是“current_user”?
- 30. 什么是.css in css?
谢谢你,我们也计划同样的解决方案,但在现有的安装中添加一个新表需要一些额外的验证和时间 - 因此作为一个临时解决办法,我们想分割查询。 – 2009-01-19 04:19:22
我不记得mber肯定,但我会认为临时表不需要很多权限,因为它临时发生在tempdb中。但在短期内,我认为循环您所确定的是可接受的参数计数是可行的。 – dkretz 2009-01-19 04:46:19
或者,如果您一次都需要它们,则可以对多个语句执行UNION。 – dkretz 2009-01-19 04:47:34