1. 程式人生 > 資料庫 >mysql總結(二)

mysql總結(二)

  1. mysql explain是什麼?有什麼作用?描述下type

    EXPLAIN是一個關鍵字,使用EXPLAIN關鍵字可以模擬優化器執行SQL查詢語句,從而知道MySQL是如何處理SQL語句的,分析查詢語句或是表結構的效能瓶頸。
    作用:
    ①表的讀取順序
    ②資料讀取操作的操作型別
    ③哪些索引可以使用
    ④哪些索引被實際使用
    ⑤表之間的引用
    ⑥每張表有多少行被優化器查詢
    型別;顯示查詢使用了何種型別,從最好到最差依次是:
    system>const>eq_ref>ref>range>index>ALL

  2. mysql中有哪幾種鎖?表鎖、行鎖、頁鎖區別?

    表鎖

    :開銷小,加鎖快;不會出現死鎖;鎖定力度大,發生鎖衝突概率高,併發度最低
    行鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度小,發生鎖衝突的概率低,併發度高
    頁鎖:開銷和加鎖速度介於表鎖和行鎖之間;會出現死鎖;鎖定粒度介於表鎖和行鎖之間,併發度一般

  3. 悲觀鎖 樂觀鎖 的區別

    悲觀鎖是當執行緒拿到資源時,就對資源上鎖,並在提交後,才釋放鎖資源,其他執行緒才能使用資源。
    樂觀鎖是當執行緒拿到資源時,上樂觀鎖,在提交之前,其他的鎖也可以操作這個資源,當有衝突的時候,併發機制會保留前一個提交,打回後一個提交,讓後一個執行緒重新獲取資源後,再操作,然後提交。和git上傳程式碼一樣,兩個執行緒都不是直接獲取資源本身,而是先獲取資源的兩個copy版本,然後在這兩個copy版本上修改。

    ③悲觀鎖和樂觀鎖在併發量低的時候,效能差不多,但是在併發量高的時候, 樂觀鎖的效能遠遠優於悲觀鎖。

  4. 什麼是索引?

    在關係資料庫中,索引是一種單獨的、物理的對資料庫表中一列或多列的值進行排序的一種儲存結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。

  5. 索引的種類有哪些,描述索引的優缺點?

    唯一索引:在建立唯一索引時要不能給具有相同的索引值。
    主鍵索引:在我們給一個欄位設定主鍵的時候,它就會自動建立主鍵索引,用來確保每一個值都是唯一的。
    聚集索引:我們在表中新增資料的順序,與我們建立的索引鍵值相同,而且一個表中只能有一個聚集索引。

    普通索引:它的結構主要以B+樹和雜湊索引為主,主要是對資料表中的資料進行精確查詢。
    全文索引:它的作用是搜尋資料表中的欄位是不是包含我們搜尋的關鍵字,就像搜尋引擎中的模糊查詢。
    使用索引的優點:
    ①提高資料的搜尋速度
    ②加快表與表之間的連線速度
    ③在資訊檢索過程中,若使用分組及排序子句進行時,通過建立索引能有效的減少檢索過程中所需的分組及排序時間,提高檢索效率。
    使用索引的缺點:
    ①在我們建立資料庫的時候,需要花費時間去建立和維護索引,而且隨著資料量的增加,需要維護它的時間也會增加。
    ②在建立索引的時候會佔用儲存空間。
    ③在我們需要修改表中的資料時,索引還需要進行動態的維護,所以對資料庫的維護帶來了一定的麻煩。

  6. 設計索引的原則?

    ①在經常需要搜尋的列上,可以加快搜索的速度
    ②在作為主鍵的列上
    ③在經常用在連線的列上,這些列主要是一些外來鍵,可以加快連線的速度
    ④在經常需要根據範圍進行搜尋的列上建立索引,因為索引已經排序,其指定的範圍是連續的
    ⑤在經常需要order by,group by,distinct 列上建立索引,這樣查詢可以利用索引的排序,加快排序查詢時間
    ⑥在經常使用在WHERE子句中的列上面建立索引,加快條件的判斷速度

  7. 什麼情況下索引會失效?

    ①條件中有or
    ②like查詢是以%開頭
    ③列型別是字串時,沒有用引號引用起來
    ④mysql估計使用全表掃描要比使用索引快

  8. 資料庫優化方案?(至少3條)

    資料分割槽
    對於海量的資料查詢優化,一種重要方式是如何有效的儲存並降低需要處理的資料規模,所以我們呢可以對海量資料進行分割槽.例如,針對年份儲存的資料,我們可以按照年進行分割槽,不同資料庫有不同的分割槽方式,但處理機制卻大體相同.例如SQLserver的資料分割槽將不同的資料存於不同的檔案組中,而不同的檔案存在不同的磁碟分割槽下,這樣吧資料分割槽,減少磁碟IO和系統負荷.
    索引
    索引一般可以加速資料的檢索資料,加速表之間的連線,對錶建索引包括在主鍵上建立聚簇索引,將聚合索引建立在日期列上, 索引的優點很多,但是對於索引的建立,還需要考慮實際情況,而不能對每個列都建索引.如果表結構很大,你要考慮到建立索引和維護索引的開銷,索引本身也佔用物理空間,動態修改表也要動態維護索引,如果這些開銷大過索引帶來的速度優化,那就得不償失.
    快取機制
    當資料量增加時,一般的處理工具都考慮快取問題,快取大小的設定也關係到資料處理的表現.列如,
    處理2億條資料聚合操作室,快取設定為100000條/buffer合理
    加大虛存
    由於系統資源有限,而處理的資料量非常大,當記憶體不足時,適量增加虛存來解決
    分批處理
    由於處理資訊量巨大,可以對海量的資料進行分批(類似雲端計算MapReduce),然後再對處理後的資料進行合併操作,分而治之,這樣有利於處理小資料.
    使用臨時表和中間表
    資料量增加時,處理中要考慮提前彙總,這樣做的目的是化整為零,大表變小表,分塊處理完之後再利用一定的規則進行合併,處理過程中的臨時表的使用和中間結果的儲存都非常重要.如果對海量的資料,大表處理不了,只能拆分為多個小表.如果處理過程中需要多步彙總操作,則按彙總步驟一步一步來.
    優化查詢語句
    查詢語句的效能對查詢效率的影響非常大,儘量早的縮小查詢範圍
    使用檢視
    檢視是表中的邏輯表現,不佔用實體地址,對於海量資料,可以按一定的規則分散到各個基本表中,查詢過程基於檢視進行.
    使用儲存過程
    在儲存過程中儘量使用SQL自帶的返回引數,而非自定義的返回引數,減少不必要的引數,避免資料冗餘
    用排序來取代非順序儲存
    磁碟上的機械手臂的來回移動使得非順序磁碟存取變成了最慢的操作,但是在SQL語句中這個現象被隱藏了,這樣就使得查詢中進行了大量的非順序頁查詢,降低了查詢速度.
    使用取樣資料進行資料探勘
    基於海量資料的資料探勘方興未艾,面對超海量資料,一般的挖掘演算法往往採用資料抽樣的方式進行處理,這樣誤差不會很大,大大的提高處理效率和處理的成功率.一般取樣時應注意資料的完整性,防止過大的偏差.
    引用自https://www.cnblogs.com/xiongchao0823/p/11650624.html

  9. 什麼是儲存過程?有什麼優缺點?

    儲存過程(Stored Procedure)是在大型資料庫系統中,一組為了完成特定功能的SQL 語句集,它儲存在資料庫中,一次編譯後永久有效,使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它。儲存過程是資料庫中的一個重要物件。在資料量特別龐大的情況下利用儲存過程能達到倍速的效率提升。

  10. 什麼是檢視,檢視有什麼作用?

    檢視(view)是一bai種虛擬存在的表,是一個邏輯表,本身並不du包含資料zhi。作為一個select語句儲存在數dao據字典中的。通過檢視,可以展現基表(用來建立檢視的表)的部分資料;檢視資料來自定義檢視的查詢中使用的表,使用檢視動態生成。
    簡單:使用檢視的使用者完全不需要關心後面對應的表的結構、關聯條件和篩選條件,對使用者來說已經是過濾好的複合條件的結果集。
    安全:使用檢視的使用者只能訪問他們被允許查詢的結果集,對錶的許可權管理並不能限制到某個行某個列,但是通過檢視就可以簡單的實現。
    資料獨立:一旦檢視的結構確定了,可以遮蔽表結構變化對使用者的影響,源表增加列對檢視沒有影響;源表修改列名,則可以通過修改檢視來解決,不會造成對訪問者的影響。

  11. Btree和Hash區別

    ①btree可以用作範圍查詢,比如>,>=,<,<=和between,除去萬用字元開頭查詢。而hash只能用作對等查詢
    ②hash一次定位資料,btree總是從根到葉子節點,所以hash檢索效率高
    ③hash不支援使用索引排序
    ④hash不支援模糊查詢以及最左字首匹配
    ⑤hash一定要回表查詢資料,btree的聚簇索引可以不用回表索引
    ⑥hash等值查詢效率不一定比btree高。當雜湊衝突很大,就會影響效率