查看: 1713|回复: 14
|
mysql query 太長,結果出現error
[复制链接]
|
|
大家好。我寫的軟件用vb .net, MySql
做query時為了過濾兩萬個產品,結果query string很長(算了大概是927592個英文字母)
try catch 時的error message是Got packets out of order
之後用mysql query browser 時它的訊息是:Lost connection to MySQL server during query
請問如何解決這個問題?
謝謝
|
|
|
|
|
|
|
|
发表于 14-5-2013 11:37 AM
|
显示全部楼层
是web嗎?
如果你肯定是query string太長的問題,你可以改mysql的max_allowed_packet.
還有一個辦法,最好別用,把一個query分成幾個,result store 在 temp table. 再join成一個. |
|
|
|
|
|
|
|

楼主 |
发表于 14-5-2013 11:59 AM
|
显示全部楼层
還是一樣。我用的指令:SET GLOBAL max_allowed_packet=1073741824; |
|
|
|
|
|
|
|
发表于 14-5-2013 12:06 PM
|
显示全部楼层
試看把一個query 分成幾個,比如 sex = male store 在 table TempA, age > 30 store 在 table TempB, 然後把幾個table join 成一個
沒其他辦法才用. |
|
|
|
|
|
|
|
发表于 15-5-2013 03:02 AM
|
显示全部楼层
难道 lz 用 NOT IN 来过滤两万多的产品? |
|
|
|
|
|
|
|
发表于 15-5-2013 06:48 PM
|
显示全部楼层
第一次听到,一个Query竟能塞死MySQL Server。。。Optimization已死,common sense陪葬。。。服了。.gif)
90多万个字母,换成Double-byte,都可以写一本40几万字的中篇小说了啊。楼主,你是神啊。 本帖最后由 geekman 于 15-5-2013 06:56 PM 编辑
|
|
|
|
|
|
|
|

楼主 |
发表于 15-5-2013 11:35 PM
|
显示全部楼层
hooi1983 发表于 15-5-2013 03:02 AM 
难道 lz 用 NOT IN 来过滤两万多的产品?
之前設計軟件時沒考慮到軟件使用者能有超過10000個貨品。所以才會出現這個問題。現在用比較笨的方式解決了。
|
|
|
|
|
|
|
|
发表于 16-5-2013 12:39 PM
|
显示全部楼层
那你总能将货物分门别类,把类似的货物分成几个Product Group,然后根据Product Group来减少Query需要处理的货物数量吧?每次query都得处理上万个Filter/Condition,就算给你一架12 Core Xeon Server 都会死啦死啦的。 |
|
|
|
|
|
|
|
发表于 16-5-2013 03:34 PM
|
显示全部楼层
我其實相當好奇query怎麼會那麼長的.
對了.這裡好像很冷清.
|
|
|
|
|
|
|
|

楼主 |
发表于 16-5-2013 11:29 PM
|
显示全部楼层
yan13 发表于 16-5-2013 03:34 PM 
我其實相當好奇query怎麼會那麼長的.
對了.這裡好像很冷清.
嗯,或許同行還在電腦前工作吧!
|
|
|
|
|
|
|
|
发表于 17-5-2013 12:48 AM
|
显示全部楼层
不知道你的资料是怎么样的,所以随便猜猜。
从 “过滤两万个” 这样的情况,
反问,难道不能改成 “选要的 几种 类型” ?
设计可能有问题。
我个人比较建议使用 geekman 的方法。
分析你的资料,再把产品分类,
可以有多项分类,也可以有多层的分类。
如 LED, printer, keyboard, mouse 都属于 computer 相关产品。
keyboard, mouse 则属于 input devices
而 LED, printer 属于 output devices
|
|
|
|
|
|
|
|
发表于 17-5-2013 07:41 AM
|
显示全部楼层
那我也來猜吧
原貼叫他產品,應該不是人名,可能是manufacturing industrial.
2萬個products可能是同一個category,比如都是mouse.但不同的model.
顧客的要求可能是他們要能夠自己選那一個產品需要print.所以你需要給他2萬個List item選. 如果user全選就變成了2萬個 where productID = 'xxxxxxx'.
我好奇的原因很簡單,我是希望改天我遇上同樣情形我會把這問題考慮在內.
|
|
|
|
|
|
|
|
发表于 11-6-2013 10:42 PM
|
显示全部楼层
如果能的话,放你的sql出来和table structure。这样才知道问题在哪里 |
|
|
|
|
|
|
|

楼主 |
发表于 12-6-2013 12:56 PM
|
显示全部楼层
举个例子:
select * from stock where stockname in ('xxxxx','xxxxx','xxxxx','xxxxx')
我用c# code 来完成'xxxxx',刚好其中一间公司是有上万个stock的,所以问题就出来了。现在客户都是选择所有货品,所以直接用c# code if else来跳过这个问题。
|
|
|
|
|
|
|
|
发表于 17-7-2013 03:41 PM
|
显示全部楼层
ltk1984 发表于 12-6-2013 12:56 PM 
举个例子:
select * from stock where stockname in ('xxxxx','xxxxx','xxxxx','xxxxx')
我用c# code 来 ...
可能有一个 Table 是记录 公司有的货品
那么可以试试看这样:
select * from Stock where StockID in ( select stockID from CompanyStock where CompanyID='xxxxx' )
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|