1.MySQL 索引使用的注意事項
索引是數據結構,, 索引的優勢:檢索查詢會,排序快; 劣勢:寫操作會變慢,索引佔磁盤空間
什麼情況下適合創建索引: 頻繁查詢的字段,或者多表關聯的字段建立索引,排序分組操作的字段, 會提高查詢
不適合建索引: 表數據少,經常增刪改的, where 條件不需要用到的字段,過濾性不好的字段, 不要建索引,
2.DDL、DML、DCL分別指什麼
DDL -數據庫定義語言: 在創建表的時候用到的一些sql,比如說:CREATE、ALTER、DROP等。DDL主要是用在定義或改變表的結構,數據類型,表之間的鏈接和約束等初始化工作上。
DML -數據操作語言: 也就是平時我們對數據進行增刪改查,主要用來對數據庫的數據進行一些操作。
DCL-數據庫控制語言:是用來設置或更改數據庫用戶或角色權限的語句,包括(grant,deny,revoke等)語句。這個比較少用到。比如Commint , rollback ,SET TRANSACTION (設置事物) 等,較少用到
3.explain命令
數據庫性能分析Explain命令,執行 Explain select * from emp where empno = 3333\G 語句
對於返回的信息,我們主要關心一下幾個
1) Type 》 ALL全表掃描,通常是不好的,其他的如index、range、const、ref、system則是較好的
2) Possible_keys 》可能被用到的索引
3) Key 》查詢過程中實際使用的索引,當爲null時表示沒有使用索引,通常是不好的
4) key_len 》索引字段最大可能使用的長度,也叫索引基數。索引基數越大,表明可能查找的行數越多,查詢效率越慢。
5) Rows 》 MySQL 估計的需要掃描的行數。只是一個估計。越多表明查找的行數越多,自然越慢。
6) Extra 》顯示上述信息之外的其它信息,非常重要。其主要有一下返回結果。
4.left join,right join,inner join
比如A 和B兩個表 select A表 去left join B 條件是 on A.id=B.id A全顯示 B 只顯示等於A.id 的數據,不足的會是NULL ;
right join 相反;
inner join 只顯示a.id= b.id 的共有數據
5.數據庫事物ACID(原子性、一致性、隔離性、持久性)
6.事物的隔離級別(讀未提交、讀以提交、可重複讀、可序列化讀)
7.髒讀、幻讀、不可重複讀
8.數據庫的幾大範式
9.數據庫常見的命令
10.說說分庫與分表設計
11.分庫與分錶帶來的分佈式困境與應對之策(如何解決分佈式下的分庫分表,全局表?)
12.說說 SQL 優化之道
13.MySQL遇到的死鎖問題、如何排查與解決
14.存儲引擎的 InnoDB與MyISAM區別,優缺點,使用場景
15.MyISAM是非事務安全型的,而InnoDB是事務安全型的(支持事務處理等高級處理);
16.MyISM:如果執行大量的SELECT,MyISAM是更好的選擇
17.InnoDB:如果你的數據執行大量的INSERT或UPDATE,出於性能方面的考慮,應該使用InnoDB表
18.索引類別(B+樹索引、全文索引、哈希索引)、索引的原理
19.什麼是自適應哈希索引(AHI)
20.爲什麼要用 B+tree作爲MySQL索引的數據結構
21.聚集索引與非聚集索引的區別
22.遇到過索引失效的情況沒,什麼時候可能會出現,如何解決
23.limit 20000 加載很慢怎麼解決
24.如何選擇合適的分佈式主鍵方案
25.選擇合適的數據存儲方案
26.常見的幾種分佈式ID的設計方案
27.常見的數據庫優化方案,在你的項目中數據庫如何進行優化的