作者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://www.ptt.cc/bbs/Database/M.1417770891.A.52A.html
推 GoalBased: 不太懂為什麼種類要拆成50個table 12/05 17:27
→ GoalBased: 1,種類A 2,種類B 這樣要拆開成不同table的意思嗎? 12/05 17:28
推 bohei: 嗯,應該是那個意思,以種類分成各個table 12/05 18:49
→ bohei: 回原PO:謝謝,不過公司的產品其實已經有一套完整的架構了 12/05 18:49
→ bohei: 料號這table實在是不太可能再去動到架構,再說料號的table 12/05 18:50
→ bohei: 在......我另外回一篇文提出我的想法~ 12/05 18:50
推 sai25: 拆table效能會更差 12/08 13:13