關於一表很多列的總結
關於一表很多列的總結
在ITPIB上遇見一個表有900多列的例子,自己在以前也看到曾經有人這樣做過,以下就這個問題做一個總結吧。
http://www.itpub.net/showthread.php?s=&threadid=829101&perpage=10&pagenumber=3
問題
一個有920列的表算列比較多的表嗎? oracle10g中我們的一個表有920列,其它幾個表有700多列,主要是插入,沒有更新。 插和讀比較多,表的儲存是按照日期來分割槽的。但是所有的這些表都在一個表空間上。 只是不知道920多列是否算多,對應資料庫的效能影響大嗎? |
關於這樣做的好處:我不清楚在的資料庫在設計階段為什麼要設計這麼大的表,應該有自己的考慮,但是拋開他們的這些考慮,這樣做的好處無外乎有以下好處:
1、一個行能夠容納所有的資料。
2、設計簡單
3、程式設計師程式設計方便
4、以後維護方便
5、減少表表之間的連結
但是實際的系統執行中,由於你這樣的設計會給系統帶來很多問題,其中就包括效能問題:
1、由於你將一個表設計的過為複雜,在查詢的時候需要建立多各索引才能滿足你的需要,索引過多引起的效能問題
2、表的列過多,你選擇一行資料的時候往往並不是所有列的資料都需要,但是這些資料都存在一個塊中,既是你不需要,但是系統還是會將那些資料提取出來,這樣就會造成過多的IO,邏輯讀和物理讀
3、可能造成過多的行連線或者行遷移,也會影響系統效能
另外,oracle是可以提供超過1000列的資料,但是在Oracle的資料塊的存放中資料的存放是有一個位元組來標識這哥列是第幾個列,也就是說一個位元組只能表示255個列,但是如果一個表有多餘255列是如何實現的哪?Oracle是透過連結列的形式存在的,這些也給oracle的處理帶來一定的負擔,所以從Oracle的實現上來說,將呢的列控制在256之內是一個選擇。
4、在好處有程式設計師程式設計方便的好處,但是這些多的列,程式設計師寫出來應該是比較辛苦的,呵呵
有幾種方式來實現這種需求的設計:
1、主從表的方式
你可以根據業務的需要出發,將這個表分成一個主表,多個從表的形式,主從之間使用唯一外來鍵進行刪除接連。這樣的好處就是可以避免一些弊端。
2、使用縱相設計的方式實現
例如表有列c1,c2......c1000可以實現為:
col,col_values兩個列的形式來實現。
這樣有好處就是可以動態新增自己所需要的列,實現起來很靈活,方便
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/222350/viewspace-932493/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於 FormData 物件陣列傳值總結ORM物件陣列
- 關於android透明狀態列總結Android
- 關於ES5陣列方法總結陣列
- 關於 Android 狀態列的適配總結Android
- Android關於沉浸式狀態列總結Android
- 關於近期的總結
- 關於UIWebView的總結UIWebView
- 關於BeautifulSoup的總結
- 關於HTML的總結HTML
- sqlserver關於always on的總結SQLServer
- mysql關於variable的總結MySql
- ORACLE關於NULL的總結OracleNull
- 關於ORACLE鎖的總結Oracle
- 關於jboss配置的總結
- 關於new 很多小物件物件
- 關於 JOIN 耐心總結,學不會你打我係列
- sqlserver關於mirror映象的總結SQLServer
- sqlserver 關於DBCC CHECKDB的總結SQLServer
- 關於golang的time包總結Golang
- 關於 iOS 批量打包的總結iOS
- 關於Teradata PI的總結
- 關於控制檔案的總結
- 關於SCN的總結測試
- 關於oracle裡的process總結Oracle
- 關於ORACLE的一點總結Oracle
- 關於QT的系統總結QT
- 關於oracle synonym 的總結整理Oracle
- 關於Servlet小總結Servlet
- 關於Hint再總結
- java Queue佇列相關總結Java佇列
- sqlserver always on關於備份的總結SQLServer
- 關於Map集合的遍歷總結
- postgresql關於許可權的總結SQL
- C中關於堆疊的總結
- SqlServer關於分割槽表的總結SQLServer
- mysql關於臨時表的總結MySql
- mysql關於mysqld_safe的總結MySql
- mysql關於mysql.server的總結MySqlServer