數據庫摘要(本文以mysql爲例)

一.發展史

1.文件存儲(所有的內容都存在文件中)

2.單文件存儲(key-value)(存儲在多個文件中,會有一張存地址的表key-對應的磁盤路徑,查找速度回相對快)

3.層次數據(key-value)

key1

parent:k2

child:K3

key2……
key3……

4.網狀數據庫

在層次數據庫的基礎中(上圖)行數據如果超過16K,數據庫就會自動創建溢出桶,溢出桶超過16K,溢出桶也會創建溢出桶,形成網狀數據庫。

故:設計數據庫時儘量計算一下所有列加在一起的長度儘量不要超過16K

     此問題也不用考慮,DBA可以通過工具進行碎片整理,將溢出的桶整理,將同一個行數據儘量保持在同一個主桶中

二.性能(索引)


1.B+索引一般用於唯一索引(主鍵等)

   目前會要求數據庫內存大點是爲了存儲索引內容(目前索引會將索引對應的字段存入到索引體系中)

   故:索引字段儘量不要太長(會增加存儲索引的內容,從而佔用數據庫內存)

   索引儘量用整型,其次浮點型、再其次是varchar型

2.varchar型索引優化

   例如:A表的varchar字段:UUID 

            需要添加一個字段CRC(32)【此字段存儲UUID字段轉換成CRC(32)int類型的字段】

          查詢語句的寫法

            select 字段 from 表 

                   where CRC(32) =? 【因爲數據量相當大是,CRC(32) 會有重複(即使UUID是不重複的),故UUID字段查詢條件還是要加入,但是因爲先過濾了CRC(32),UUID過濾之後,重複的數據量就會很少,檢索速度也會很高】

                     and UUID = ?

3.組合索引

例如:索引A 組合了A、B、C三個字段

數據庫後臺操作時,實際會添加三個索引

index(A)

index(A、B)

index(A、B、C)

故:如果創建了A、B、C的組合索引,再搜索A或者A、B或者ABC的時候索引會起作用,搜索BC索引不起作用

     索引會遵循左墜索引原則(具體可以查看一下,不同的數據庫原則會不太一樣,mysql遵循此原則)

三.發展趨勢

  SQL語言:是非存儲性語言

                 只是一個報表語語言、表示層語言

    SQL語言本身就會降低數據的處理速度

    nosql,就是不通過sql語音,直接操作數據庫,速度回相對比較高

    Habse:表示層語言 phinx

    hadoop:表示層語言Hive

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章