作者diamondking (迷惘)
看板Database
标题Re: [讨论] 需要下条件的栏位太多
时间Fri Dec 5 17:14:49 2014
或许可以从两个方面来解决。
1、分割table。
会查超久,除了条件复杂外,资料量肯定也多。
看有没有什麽属性是可以用来拆成几张table,让资料大量减少的。
例如「料件的生产日期」?会不会很多旧的料件已经很少在用或很少会查的,
通通移到另一个table。
或是某个属性的值是有限,且必选的,
例如料件的「种类」可能固定就是50个,而且在查询时是必填的,
那就拆成50张table来放。
2、设几个常用的index,index是多个常用条件的组合。
如果有些条件是查询时必填的话更好,一定要设成index。
另外注意一点,当user选完所有的条件,你要组成sql的时候,
与index有关的条件,要自动排在where的最前面,以让DB去使用到你设的index。
如此多的查询条件,我猜sql只能用程式动态组出来会比较灵活,
所以程式里要写一堆if...else来判断和尽量组合出能用上index的where条件。
index的设计需要一些经验,有些栏位不适合,或是有的要排前,有的要排後,
我不晓得你之前有没有碰过。
※ 引述《bohei (run and fall)》之铭言:
: 大家好 目前遇到的问题很简单也很复杂XD
: 例如料件表,光描述这颗料件的属性就有50~60的栏位
: 当要对料件下详细的条件时,势必要对这几十个栏位下条件
: WHERE条件就长长串,也影响到查询的速度...
: 不知道遇到这情形,大家是怎麽克服的?
: ##
: 补充:
: 条件会是一组一组的,可能分成几十组条件(每一组条件就是下几十个栏位)..
: 这几十组跑完都天黑了..XD
: ##
: 谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.166.241.82
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Database/M.1417770891.A.52A.html
1F:推 GoalBased: 不太懂为什麽种类要拆成50个table 12/05 17:27
2F:→ GoalBased: 1,种类A 2,种类B 这样要拆开成不同table的意思吗? 12/05 17:28
3F:推 bohei: 嗯,应该是那个意思,以种类分成各个table 12/05 18:49
4F:→ bohei: 回原PO:谢谢,不过公司的产品其实已经有一套完整的架构了 12/05 18:49
5F:→ bohei: 料号这table实在是不太可能再去动到架构,再说料号的table 12/05 18:50
6F:→ bohei: 在......我另外回一篇文提出我的想法~ 12/05 18:50
7F:推 sai25: 拆table效能会更差 12/08 13:13