更新時間:2022-12-22 15:26:04 來源:動力節(jié)點 瀏覽1751次
1、數(shù)據(jù)庫存儲引擎
數(shù)據(jù)庫存儲引擎是數(shù)據(jù)庫底層軟件組織,數(shù)據(jù)庫管理系統(tǒng)(DBMS)使用數(shù)據(jù)引擎進(jìn)行創(chuàng)建、查詢、更新和刪除數(shù)據(jù)。不同的存儲引擎提供
不同的存儲機(jī)制、索引技巧、鎖定水平等功能,使用不同的存儲引擎,還可以 獲得特定的功能。現(xiàn)在許多不同的數(shù)據(jù)庫管理系統(tǒng)都支持多
種不同的數(shù)據(jù)引擎。存儲引擎主要有: 1. MyIsam , 2. InnoDB, 3. Memory, 4. Archive, 5. Federated 。
2、InnoDB(B+樹)
InnoDB 底層存儲結(jié)構(gòu)為B+樹, B樹的每個節(jié)點對應(yīng)innodb的一個page, page大小是固定的,一般設(shè)為 16k。其中非葉子節(jié)點只有鍵值,
葉子節(jié)點包含完成數(shù)據(jù)
適用場景:
1)經(jīng)常更新的表,適合處理多重并發(fā)的更新請求。
2)支持事務(wù)。
3)可以從災(zāi)難中恢復(fù)(通過 bin-log 日志等)。
4)外鍵約束。只有他支持外鍵。
5)支持自動增加列屬性 auto_increment。
3、TokuDB( Fractal Tree-節(jié)點帶數(shù)據(jù))
TokuDB 底層存儲結(jié)構(gòu)為 Fractal Tree,Fractal Tree 的結(jié)構(gòu)與 B+樹有些類似, 在 Fractal Tree中,
每一個 child 指針除了需要指向一個 child
節(jié)點外,還會帶有一個 Message Buffer ,這個Message Buffer 是一個 FIFO 的隊列,用來緩存更新操作。
例如,一次插入操作只需要落在某節(jié)點的 Message Buffer 就可以馬上返回了,并不需要搜索到葉子節(jié)點。這些緩存的更新會在查詢時或后
臺異步合并應(yīng)用到對應(yīng)的節(jié)點中。
TokuDB 在線添加索引,不影響讀寫操作, 非常快的寫入性能, Fractal-tree 在事務(wù)實現(xiàn)上有優(yōu)
勢。 他主要適用于訪問頻率不高的數(shù)據(jù)或歷史數(shù)據(jù)歸檔
4、MyIASM
MyIASM是 MySQL默認(rèn)的引擎,但是它沒有提供對數(shù)據(jù)庫事務(wù)的支持,也不支持行級鎖和外鍵,因此當(dāng) NSERT(插入)或 UPDATE(更新)數(shù)據(jù)
時即寫操作需要鎖定整個表,效率便會低一些。
ISAM 執(zhí)行讀取操作的速度很快,而且不占用大量的內(nèi)存和存儲資源。在設(shè)計之初就預(yù)想數(shù)據(jù)組織成有固定長度的記錄,按順序存儲的。 ---
ISAM 是一種靜態(tài)索引結(jié)構(gòu)。
缺點是它不 支持事務(wù)處理。
5、Memory
Memory(也叫 HEAP)堆內(nèi)存:使用存在內(nèi)存中的內(nèi)容來創(chuàng)建表。每個 MEMORY 表只實際對應(yīng)一個磁盤文件。 MEMORY 類型的表訪問
非常得快,因為它的數(shù)據(jù)是放在內(nèi)存中的,并且默認(rèn)使用HASH 索引。但是一旦服務(wù)關(guān)閉,表中的數(shù)據(jù)就會丟失掉。 Memory 同時支持散
列索引和 B 樹索引, B樹索引可以使用部分查詢和通配查詢,也可以使用<,>和>=等操作符方便數(shù)據(jù)挖掘,散列索引相等的比較快但是對于
范圍的比較慢很多
6、數(shù)據(jù)庫引擎有哪些
如何查看mysql提供的所有存儲引擎
mysql> show engines;
mysql常用引擎包括:MYISAM、Innodb、Memory、MERGE
1. MYISAM:全表鎖,擁有較高的執(zhí)行速度,不支持事務(wù),不支持外鍵,并發(fā)性能差,占用空間相對較小,對事務(wù)完整性沒有要求,以
select、insert為主的應(yīng)用基本上可以使用這引擎
2. Innodb:行級鎖,提供了具有提交、回滾和崩潰回復(fù)能力的事務(wù)安全,支持自動增長列,支持外鍵約束,并發(fā)能力強(qiáng),占用空間是
MYISAM的2.5倍,處理效率相對會差一些
3. Memory:全表鎖,存儲在內(nèi)容中,速度快,但會占用和數(shù)據(jù)量成正比的內(nèi)存空間且數(shù)據(jù)在mysql重啟時會丟失,默認(rèn)使用HASH索引,
檢索效率非常高,但不適用于精確查找,主要用于那些內(nèi)容變化不頻繁的代碼表
4. MERGE:是一組MYISAM表的組合
7、InnoDB與MyISAM的區(qū)別
1. InnoDB支持事務(wù),MyISAM不支持,對于InnoDB每一條SQL語言都默認(rèn)封裝成事務(wù),自動提交,這樣會影響速度,所以最好把多條
SQL語言放在begin和commit之間,組成一個事務(wù);
2. InnoDB支持外鍵,而MyISAM不支持。對一個包含外鍵的InnoDB表轉(zhuǎn)為MYISAM會失敗;
3. InnoDB是聚集索引,數(shù)據(jù)文件是和索引綁在一起的,必須要有主鍵,通過主鍵索引效率很高。但是輔助索引需要兩次查詢,先查詢到
主鍵,然后再通過主鍵查詢到數(shù)據(jù)。因此,主鍵不應(yīng)該過大,因為主鍵太大,其他索引也都會很大。而MyISAM是非聚集索引,數(shù)據(jù)文
件是分離的,索引保存的是數(shù)據(jù)文件的指針。主鍵索引和輔助索引是獨立的。
4. InnoDB不保存表的具體行數(shù),執(zhí)行select count(*) from table時需要全表掃描。而MyISAM用一個變量保存了整個表的行數(shù),執(zhí)行上
述語句時只需要讀出該變量即可,速度很快;
5. Innodb不支持全文索引,而MyISAM支持全文索引,查詢效率上MyISAM要高
8、索引
索引(Index)是幫助 MySQL 高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。 常見的查詢算法,順序查找,二分查找,二叉排序樹查找,哈希散列法,分塊查找,平衡多
路搜索樹 B 樹(B-tree) ,索引是對數(shù)據(jù)庫表中一個或多個列的值進(jìn)行排序的結(jié)構(gòu),建立索引有助于快速獲取信息。
你也可以這樣理解:索引就是加快檢索表中數(shù)據(jù)的方法。數(shù)據(jù)庫的索引類似于書籍的索引。在書籍中,索引允許用戶不必翻閱完整個書就能
迅速地找到所需要的信息。在數(shù)據(jù)庫中,索引也允許數(shù)據(jù)庫程序迅速地找到表中的數(shù)據(jù),而不必掃描整個數(shù)據(jù)庫
mysql 有4種不同的索引:
主鍵索引(PRIMARY)
唯一索引(UNIQUE)
普通索引(INDEX)
全文索引(FULLTEXT)
索引并非是越多越好,創(chuàng)建索引也需要耗費資源,一是增加了數(shù)據(jù)庫的存儲空間,二是在插入和刪除時要花費較多的時間維護(hù)索引
索引加快數(shù)據(jù)庫的檢索速度
索引降低了插入、刪除、修改等維護(hù)任務(wù)的速度
唯一索引可以確保每一行數(shù)據(jù)的唯一性
通過使用索引,可以在查詢的過程中使用優(yōu)化隱藏器,提高系統(tǒng)的性能
索引需要占物理和數(shù)據(jù)空間
以上就是“2023總結(jié)的Mysql面試題大全”,你能回答上來嗎?如果想要了解更多的Java面試題相關(guān)內(nèi)容,可以關(guān)注動力節(jié)點Java官網(wǎng)。
相關(guān)閱讀