Re: [討論] 需要下條件的欄位太多

作者: diamondking (迷惘)   2014-12-05 17:14:49
或許可以從兩個方面來解決。
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
: ##
: 謝謝!
作者: GoalBased (Artificail Intelligence)   2014-12-05 17:27:00
不太懂為什麼種類要拆成50個table1,種類A 2,種類B 這樣要拆開成不同table的意思嗎?
作者: bohei (run and fall)   2014-12-05 18:49:00
嗯,應該是那個意思,以種類分成各個table回原PO:謝謝,不過公司的產品其實已經有一套完整的架構了料號這table實在是不太可能再去動到架構,再說料號的table在......我另外回一篇文提出我的想法~
作者: sai25 (hyde)   2014-12-08 13:13:00
拆table效能會更差

Links booklink

Contact Us: admin [ a t ] ucptt.com