佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1713|回复: 14

mysql query 太長,結果出現error

[复制链接]
发表于 13-5-2013 11:44 PM | 显示全部楼层 |阅读模式
大家好。我寫的軟件用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
請問如何解決這個問題?
謝謝
回复

使用道具 举报


ADVERTISEMENT

发表于 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陪葬。。。服了。

90多万个字母,换成Double-byte,都可以写一本40几万字的中篇小说了啊。楼主,你是神啊。 本帖最后由 geekman 于 15-5-2013 06:56 PM 编辑

回复

使用道具 举报

Follow Us
 楼主| 发表于 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 都会死啦死啦的。
回复

使用道具 举报


ADVERTISEMENT

发表于 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' )



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 24-9-2025 05:58 AM , Processed in 0.129110 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表