介紹一下聚簇索引和非聚簇索引
聚簇索引(innobe)的葉子節點就是數據節點 而非聚簇索引(myisam)的葉子節點仍然是索引文件 只是這個索引文件中包含指向對應數據塊的指針
索引失效
where用了!=
使用了函數
模糊搜索時使用了非前綴,如“like %abc”
選擇性低
Or條件
ACID
1、原子性(Atomicity):事務中的全部操作在數據庫中是不可分割的,要么全部完成,要么均不執行。
2、一致性(Consistency):幾個并行執行的事務,其執行結果必須與按某一順序串行執行的結果相一致。事務必須是使數據庫從一個一致性狀態變到另一個一致性狀態。多個賬戶錢的總和不變
3、隔離性(Isolation):事務的執行不受其他事務的干擾,事務執行的中間結果對其他事務必須是透明的。(即事務隔離級別)(轉錢時,從其他用戶角度看)
4、持久性(Durability):對于任意已提交事務,系統必須保證該事務對數據庫的改變不被丟失,即使數據庫出現故障。
事務的隔離級別
1、臟讀:臟讀是指在一個事務處理過程里讀取了另一個未提交的事務中的數據。
2、不可重復讀:不可重復讀是指在對于數據庫中的某個數據,一個事務范圍內多次查詢卻返回了不同的數據值,這是由于在查詢間隔,被另一個事務修改并提交了。
3、虛讀(幻讀)
在同一個事務中,同一個查詢多次返回的結果不一致。事務A新增了一條記錄,事務B在事務A提交前后各執行了一次查詢操作,發現后一次比前一次多了一條記錄。就好像產生幻覺一樣,這就是發生了幻讀。
數據庫的隔離級別
1、未提交讀(READ UNCOMMITTED)
事務中的修改,即使沒有提交,對于其他事務來說也是可見的。也就是說事務可以讀取未提交的數據,也就是臟讀(Dirty Read).
這是最低的隔離級別,實際的應用中一般不用這種隔離級別。
2、提交讀(READ COMMITTED)
一個事務所做的修改在提交前對于其他事務是不可見的。所以一個事務中兩次執行同樣的查詢,有可能會產生不一樣的結果,
因此這個隔離級別也成為不可重復讀(nonrepeatable read)
3、可重復讀(REPEATABLE READ)
可重復讀保證了同一個事務中對同樣記錄的查詢結果是一致的,所有他不會產生以上兩種隔離級別的臟讀和結果不一致情況。無法解決幻讀。(InnoDB.XtraDB采用MVCC解決幻讀)。
4、可串行化(SERIALIZABLE)
可串行化是最高的隔離級別,通過強制事務串行執行來避免前面說的問題。
簡單說,他會在讀取的每一行上都加上鎖,所以會導致大量的超時 和鎖爭用問題。
實際應用中很少用到這個,除非需要確保數據的一致性并且沒有并發的情況下才考慮。
sql相關,sum與count區別
SUM是對符合條件的記錄的數值列求和
COUNT 是對查詢中符合條件的結果(或記錄)的個數
group by用法,注意事項
數據庫死鎖/如何防止
sql中join的幾種操作的區別
union和union all的區別,誰的效率更高
Union:對兩個結果集進行并集操作,不包括重復行,同時進行默認規則的排序
Union All:對兩個結果集進行并集操作,包括重復行,不進行排序
用distinct和用group by去重
mysql存儲引擎
存儲引擎主要有: 1. MyIsam , 2. InnoDB, 3. Memory, 4. Blackhole, 5. CSV, 6. Performance_Schema, 7. Archive, 8. Federated , 9 Mrg_Myisam
MyISAM和InnoDB的主要區別和應用場景 - CSDN博客
MySQL主從復制
Mysql主從同步(復制) - kylinlin - 博客園
explain