1.什么是索引 索引指數據庫的目錄,比如:字典上面的字母目錄 (適用於大數據量) 2.建立索引的優缺點 優點:查詢速度快 缺點:增刪改慢,因為數據庫要同步去維護索引文件,所以速度慢 3.索引有哪些 普通 主鍵 唯一 組合 4. 索引檢索為什么快 索引結構:B+Tree 5.一般你們會在什么情況下加索引 (1)主鍵自動建立唯一索引 (2)頻繁作為查詢條件的字段應該創建索引 (3)查詢中與其他表關聯的字段,外鍵關系建立索引 (4)單鍵/組合索引的選擇問題,組合索引的性價比更高 (5)查詢中排序的字段,排序字段若通過索引去訪問將大大提高排序速度 (6)查詢中統計或者分組字段。 (7)過濾條件好的字段選擇一段選擇加索引 6.怎么知道索引用沒用上 通過explain查詢sql執行計划,主要看key使用的是哪個索引 7.用過組合索引嗎,是有序的嗎 用過, 有序 8.什么情況下會使索引失效? (1)like (2)like “%123%,前面不能+% (3)使用 關鍵字 in ,or ,null,!= 9. sql優化您們是怎么做的? 一.首先開啟數據庫慢查詢日志,定位到查詢效率比較低的sql , 找出對應的sql語句並進行分析 1.表設計是否規范,是否符合三范式的標准 (1)第一范式:保證原子性(不可拆分) (2)第二范式:每張表都有主鍵 (3)第三范式(每一列都有主鍵相關) 2.查看數據表中是否存在大量的冗余字段,字段數據類型是否合理 3.盡可能的使用varchar代替char 建表數據類型,能用數值的絕對不用字符存儲 4.盡量避免null值,使用默認值替代空值,數值型可以使用0,字符型可以使用空字符串 二.查看sql語句是否規范 (1)避免使用關鍵字:or ,in,not in ,!=,<>,避免使用select * (2)盡量避免子查詢,大部分子查詢都可以連接查詢 (3)用到or的地方可以使用union去代替實現 (4)用到in的地方可以使用exists去代替 三.分析sql的索引是否可以用上 (1) explain查詢sql的執行計划,重點關注的幾個列就是,type是不是全表掃描 (2)看一下索引是否能夠用的上,主要看key使用的是哪個索引 (3)看一下rows掃描行數是不是很大