MYSQL面試整理
SQL優化
1、使用合適的儲存引擎
a)當做大小查詢操作時,使用mylsam 因為這個引擎對修改很不友好,只做一個update都把這整個欄位鎖住,
而之後的程序就算時讀的操作也要等update結束後執行當做寫的操作時使用innodb引擎,支援行鎖,
對寫的操作執行非常快並且支援很多高階操作,如事務
2、當只查詢一條資料時,使用limit 1 這樣就不會在查詢出結果後繼續向下查詢有沒有符合條件的結果了
3、使用not exitxs 代替 not in not in不能使用索引
索引的分類
1、普通索引
2、複合索引
3、主鍵索引
4、全文索引
索引的工作原理
1、資料庫索引,是資料庫管理系統中一個排序的資料結構,以協助快熟查詢、更新資料庫張資料。索引的實現通常使用b樹或者b+樹
表設定索引缺點
1、增加資料庫的儲存空間
2、插入修改花費的時間過長
表設定索引優點
1、通過建立索引,可以保證資料庫表中每一行資料的唯一性
2、大大加快資料的檢索資料
3、加速表和表的連線
4、加速表分組和排序的時間
什麼情況下設定了所有但是無法應用
1、%開頭的like語句、模糊匹配
2、OR語句前後沒有同時使用索引
3、資料型別出現引式轉換
索引建立原則
1、經常用作過濾的欄位上建立索引
2、避免在經常存取的欄位上建立索引
3、不同值較少的欄位上避免建立索引
4、避免大資料型別建立索引
6、對於小型的表,建立索引可能會影響效能
什麼是事務?
簡答來說就是一系列資料庫操作,是資料庫應用的基本邏輯
事務是作為一個單元的一組有序的資料庫操作。如果組中的所有操作都成功,則認為事務成功。即使有一個操作失敗,事務也不成功,
所有操作完成,事務成功提交,其修改用於資料庫的所有程序。事務失敗,事務回滾,該事務所有操作取消。
資料庫的4大特性
1、原子性:事務中所有操作,要不全部成功,要麼全部失敗,不肯能滯留在中間的某個環節。事務執行中如果發生錯誤,
所有操作都會回滾到事務開始之前,就像這個事務沒有執行一樣
2、一致性:事務的開始之前和結束之後,資料庫的資料完整性沒有被破壞。
4、永續性:在事務完成後,對資料庫做的操作持久儲存在資料庫中
MySQL資料庫為我們提供的四種隔離級別: 預設(讀已提交)
1、Serializable (序列化):可避免髒讀、不可重複讀、幻讀的發生。
2、Repeatable read (可重複讀):可避免髒讀、不可重複讀的發生。
3、Read committed (讀已提交):可避免髒讀的發生。
4、Read uncommitted (讀未提交):最低級別,任何情況都無法保證
資料庫儲存引起MyLsam和Innodb的區別
1、Innodb支援事務,MyLsam不支援事務
2、Innodb支援行鎖,MyLsam不支援
3、Innodb支援外來鍵,MyLsam不支援
4、Innodb是索引表,MyLsam是堆表
5、Innodb支援全文索引,MyLsam不支援
資料庫三正規化
1、一張表只描述一件事
2、表中的每個欄位都依賴於主鍵
3、從表的外來鍵必須使用主表的主鍵
主鍵、外來鍵、索引的區別
1、主鍵:用來保證資料完整性,並且只有一個
2、外來鍵:用來和其他表建立聯絡,可以有多個
3、索引:提高查詢排序的速度,一個表可以有多個唯一索引
Mysql相比其他資料庫的優點
1、能夠處理擁有上萬條記錄的達性資料資料
2、支援常見資料庫語句規範
3、可移植性高,安裝簡單
4、良好的執行效率,豐富的網路支援
5、調優管理優化簡單
Mysql和Oracle的區別
- oracle支援大併發,大訪問量
- 分頁Oracle是rowmun,mysql是limit
- Mysql有主鍵自增長,oracle沒有主鍵自增長,一般使用序列
什麼是儲存過程???
儲存過程是一個預編譯的sql語句,優點是允許模組化設計,就是說只需建立一次,差異化後在該程式中可以多次呼叫,
如果某次需要執行多次sql使用儲存過程比單詞的sql語句要快,可以用一個命令物件來呼叫儲存過程
SQL去重
select distinct 欄位 from 表