索引原理:
資料在磁碟中是以「塊」的形式儲存的,所以一張表涉及的資料可能會存在多個塊中,而在磁碟中查詢資料則會根據字段是否為有序與無序來區分,
無序情況:1.數值具有唯一性則需要查詢 總塊數/2
2.無序+無唯一性則需要查詢 總塊數
有序情況:1.數值唯一性:log2(總塊數/2) (log2是二分查詢演算法)
2.無唯一性:log2(總塊數)
結論:索引是對字段的有序排序,屬於有序情況,其查詢的塊數大大減少了,所以才能大大提高查詢的效率
舉例:有乙個myisam的表good,記錄數是500w,每個記錄的位元組數是204,而做了索引的有序字段位元組數是54(建立索引時候會建立乙個索引資料結構,往後的查詢就是在該結構上做處理,下面的「什麼是索引」有提及到該點)
情況:myisam預設的塊的位元組數是1024, 所以乙個塊能儲存的記錄數是5(1024/204),索引的乙個塊能儲存的記錄數是18(1024/54), 那麼good表需要的總塊數是100w(500w/5),而good的索引字段需要的總塊數是277778(500w/18)
結論:有序的字段查詢(索引的字段)需要查詢的塊數是:log2(277778) 或 log2(277778/2), 具體看該索引字段是否存在值唯一性,而無序欄位則需要查詢100w或者50w個塊,效率低下啊
什麼是索引(what is indexing)?
索引是對記錄集的多個字段進行排序的方法。在一張表中為乙個字段建立乙個索引,將建立另外乙個資料結構,包含字段數值以及指向相關記錄的指標,然後對這個索引結構進行排序,允許在該資料上進行二分法排序。
***是索引需要額外的磁碟空間,對於myisam引擎而言,這些索引是被統一儲存在一張表中的,這個檔案將很快到達底層檔案系統所能夠支援的大小限制,如果很多欄位都建立了索引的話
mysql資料庫蛛 MySQL索引認知1
前言 索引是mysql資料庫中很重要的組成部分,也是程式設計師最關注的部分,索引的目的主要在於提高查詢的效率。可以模擬於字典中的目錄。查詢字典中的內容的同時,可以根據目錄查詢資料的存放位置,從而提取到資料。mysql 支援多種儲存引擎,我們只針對innodb下面的b tree索引進行學習 索引的原理...
mySql基本認知
事務,指它是乙個操作序列,要麼執行,要麼不執行,是乙個不可分割的工作單位。事務有著四大特性,acid。a 原子性,事務不可再分割,要麼發生 要麼不發生 c 一致性,事務在執行之前與執行之後的資料庫的完整性約束沒有被破壞,約束有 唯一約束,check約束,外來鍵約束 業務的一致性也得到保持。i 隔離性...
mysql 鎖的認知
mysql鎖的問題 1.myisam和memory採取表鎖,innodb支援表鎖和行鎖,但預設使用行鎖 2.表鎖 開銷小,加鎖快,不會出現死鎖,鎖粒度大,發生鎖衝突的概率最高,併發度最低。而行鎖完全相反 3.myisam的表鎖 3.1 使用 show status like table 如果 tab...