您好,登錄后才能下訂單哦!
本篇內容介紹了“MySql慢查詢如何解決”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
主鍵id,我們采用bigint,8字節
一條數據大小1KB
第一層
一個頁16K,每一個索引鍵的大小8字節(bigint)+6字節(指針大小),因此第一層可存儲16*1024/14=1170個索引鍵。查詢Mysql的葉子可以存放多少數據,可以用sql: SHOW GLOBAL STATUS LIKE 'Innodb_page_size',大約是16k
第二層
第二層只存儲索引鍵,能存儲多少個索引鍵呢?1170(這么多個頁,有第一層延伸的指針)1170(每頁的索引鍵個數,跟第一步計算一致)=1368900
如果第二層存儲數據呢?1170(這么多個頁,有第一層延伸的指針)16(16KB的頁大小/1KB的數據大小)=18720,也就是能存儲一萬多條數。
第三層
直接看三層能存儲多少數據?1170*1170*16=21902400,是不是很強大,此處應該有掌聲和鮮花,3次IO就可以查詢到2千多萬左右的數據,也就是這么大的數據量如果通過主鍵索引來查找是很快,這就是explain一個sql時,type=const為什么性能是最優的。
從上面我們可以看出,查出兩千萬左右的數據,我們需要了3次磁盤IO,如果采用其他的結構,很明顯不是3次磁盤IO。
2. MyISAM 存儲引擎介紹(非聚簇索引)
特點:索引文件和數據文件是分離的
缺陷:不支持事務和行級鎖,而且有一個毫無疑問的缺陷就是崩潰后無法安全恢復。
它是表的存儲引擎,例如如下創建表的語句,就指定的存儲引擎,
CREATE TABLE `user` (
`id` INT(64) DEFAULT NULL
) ENGINE=MYISAM DEFAULT CHARSET=utf8
3. InnoDB 存儲引擎介紹(聚簇索引)
特點:1. 表數據文件本身就是按B+ Tree組織的一個索引結構文件
2. 聚簇索引-葉節點包含完整的數據記錄
下面有一個問題:
1. 為什么InnoDB表必須有主鍵,并且推薦使用整形的自增主鍵
InnoDB是通過主鍵聚集數據,如果沒有定義主鍵,InnoDB會選擇一個唯一的非空索引代替。如果沒有這樣的索引,InnoDB會隱式定義一個主鍵來作為聚簇索引。
使用自增主鍵,可以讓二叉樹分裂的時候,達到一個小平衡,效率更高。
“MySql慢查詢如何解決”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。