一、資料庫優化
方法:
mysql可以建分表,讀寫分離,建索引,一般經常更新的字段不適合建索引,建索引會降低資料非查詢操作的效率。主鍵是一種特殊的索引。
導致索引失效的情況:1.如果條件中有or,即使其中有條件帶索引也不會使用到。2.對於多列索引,不是使用的第一部分,則不會使用索引。3.like查詢是以%開頭,而不是以%結尾。4.如果索引列型別是字串,一定要在條件中將資料使用引號引用起來,否則不使用索引。5.如果mysql估計使用全表掃瞄要比使用索引快,則不使用索引。
二、mysql引擎的種類和區別
①種類:myisam、innodb、memory、merge、archive、blackhole、csv、federate、merge、ndb集群引擎、第三方引擎:oltp類引擎、面向列的儲存引擎、社群儲存引擎。
②區別:
a、myisam是mysql5.1及之前的預設儲存引擎。myisam不支援事務、也不支援外來鍵,但其訪問速度快,對事務完整性沒有要求。myisam表還支援3中不同的儲存格式:靜態表、動態表、壓縮表。
b、innodb儲存引擎提供了具有提交、回滾、和崩潰恢復能力的事務安全。但是比起myisam儲存引擎,innodb寫的處理效率差一些並且會占用更多的磁碟空間以保留資料和索引。innodb的儲存方式為:使用共享表空間儲存;使用多表空間。
c、memory儲存引擎使用存在記憶體中的內容來建立表。每個memory表只實際對應乙個磁碟檔案。memory型別的表訪問非常得快,因為它的資料是放在記憶體中的,並且預設使用hash索引。但是一旦服務關閉,表中的資料就會丟失掉。
d、merge儲存引擎是一組myisam表的組合,這些myisam表必須結構完全相同。merge表本身沒有資料,對merge型別的表進行查詢、更新、刪除的操作,就是對內部的myisam表進行的。
三、資料庫事務
四個特性:原子性、一致性、隔離性、永續性。
四個隔離級別:√:可能出現 ×:不會出現
髒讀不可重複讀
幻讀read uncommitted√√
√read committed×√
√repeatable read××
√serializable××
×read uncommitted(讀取未提交內容):
在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,因為它的效能也不比其他級別好多少。讀取未提交的資料,也被稱之為髒讀(dirty read)。
read committed(讀取提交內容):
這是大多數資料庫系統的預設隔離級別(但不是mysql預設的)。它滿足了隔離的簡單定義:乙個事務只能看見已經提交事務所做的改變。這種隔離級別 也支援所謂的不可重複讀(nonrepeatable read),因為同一事務的其他例項在該例項處理其間可能會有新的commit,所以同一select可能返回不同結果。
repeatable read(可重讀):
這是mysql的預設事務隔離級別,它確保同一事務的多個例項在併發讀取資料時,會看到同樣的資料行。不過理論上,這會導致另乙個棘手的問題:幻讀 (phantom read)。簡單的說,幻讀指當使用者讀取某一範圍的資料行時,另乙個事務又在該範圍內插入了新行,當使用者再讀取該範圍的資料行時,會發現有新的「幻影」 行。innodb和falcon儲存引擎通過多版本併發控制(mvcc,multiversion concurrency control)機制解決了該問題。
serializable(可序列化):
這是最高的隔離級別,它通過強制事務排序,使之不可能相互衝突,從而解決幻讀問題。簡言之,它是在每個讀的資料行上加上共享鎖。在這個級別,可能導致大量的超時現象和鎖競爭。
這四種隔離級別採取不同的鎖型別來實現,若讀取的是同乙個資料的話,就容易發生問題。例如:
i. 髒讀(drity read):某個事務已更新乙份資料,另乙個事務在此時讀取了同乙份資料,由於某些原因,前乙個rollback了操作,則後乙個事務所讀取的資料就會是不正確的。
ii. 不可重複讀(non-repeatable read):在乙個事務的兩次查詢之中資料不一致,這可能是兩次查詢過程中間插入了乙個事務更新的原有的資料。
iii. 幻讀(phantom read):在乙個事務的兩次查詢中資料筆數不一致,例如有乙個事務查詢了幾列(row)資料,而另乙個事務卻在此時插入了新的幾列資料,先前的事務在接下來的查詢中,就會發現有幾列資料是它先前所沒有的。
一致性處理:
a、開啟事務。b、申請寫許可權,也就是給物件(表或記錄)加鎖。c、假如失敗,則結束事務,過一會重試。d、假如成功,也就是給物件加鎖成功,防止其他使用者再用同樣的方式開啟。e、進行編輯操作。f、寫入所進行的編輯結果。g、假如寫入成功,則提交事務,完成操作。 h、假如寫入失敗,則回滾事務,取消提交。i、(g、h)兩步操作已釋放了鎖定的物件,恢復到操作前的狀態。
基於事務的資料庫引擎的選型:如果考慮到事務,推薦選用mysql innodb引擎;如果考慮速度,建議考慮mysql myisam引擎,並且需要在**層面做比較複雜的處理,如通過多執行緒、非同步、非阻塞等方式對資料庫進行清理,同時需要訊號量、欄柵、資料庫標誌位等工具保證資料一致性。
四、海量資料處理
1.資料庫擴充套件:
縱向擴充套件:基於業務的高度隔離性和資料的安全性,對業務和資料進行合理的切分,進行主-備機分離,主-主同步,主-從同步(對於mysql資料庫是單向非同步同步機制),主-從熱備等操作。
橫向擴充套件:對資料表進行橫向切分,按一定的規則(hash取模分、user_id尾數、自定義演算法等)對資料表進行橫向切分。
2.分布式資料方案:
提供分庫規則和路由規則(routerule簡稱rr),將上面的說明中提到的三中切分規則直接內嵌入本系統,具體的嵌入方式在接下來的內容中進行詳細的說明和論述;
引入集群(group)的概念,保證資料的高可用性;
引入負載均衡策略(loadbalancepolicy簡稱lb);
引入集群節點可用性探測機制,對單點機器的可用性進行定時的偵測,以保證lb策略的正確實施,以確保系統的高度穩定性;
引入讀/寫分離,提高資料的查詢速度。
資料庫知識
1 資料庫的建立 建立格式 create table table name 字段 其中,字段包含三部分內容 名稱 域 逗號 域即資料型別,資料庫包含5中資料型別 integer real text blob null 2 改變表 altertable 命令可以改變表的結構,sqlite版的alter...
資料庫知識
關於資料庫的知識點 表的子查詢,聯合查詢,連線查詢 子查詢 查詢中巢狀查詢。把子查詢的結果作為父查詢的查詢物件 如 select from select cname,cid from tblclass union select dname,did from department as t1 orde...
資料庫知識
dml data manipulation language 資料庫操作語言 update,insert,delete 資料庫在執行dml時,是先把資料放到記憶體的回滾段 rollback 如果執行提交 commit 時,才把回滾段裡的資料儲存到資料庫中,如果還沒執行提交 commit 使用者可以將...