Innodb表select查詢順序
今天知數(shù)堂一個(gè)學(xué)生反饋說在優(yōu)化課中老師講Innodb是以主鍵排序存儲(chǔ),讀取的時(shí)間以主鍵為順序讀取,但發(fā)現(xiàn)個(gè)例外,如下:
CREATE TABLE zst_t1 ( uid int(10) NOT NULL AUTO_INCREMENT, id int(11) NOT NULL, PRIMARY KEY ( uid ), KEY idx_id ( id ) ) ENGINE=InnoDB;'
寫入數(shù)據(jù):
INSERT INTO zst_t1 VALUES (1,1),(12,1),(22,1),(23,1),(33,1),(2,2),(3,2),(10,2),(11,2),(4,4),(13,4),(14,4);
執(zhí)行查詢:
select * from zst_t1;

為什么這個(gè)順序是亂的,不按順序排列呢?難道Innodb表并不是全按主鍵存儲(chǔ)?
使用innodb_ruby這個(gè)工具查看一下存儲(chǔ)結(jié)構(gòu)什么樣

看樣子存儲(chǔ)還是按主鍵排序存儲(chǔ)的。沒毛病。
再來看一下該表的索引:

看到這里應(yīng)該明白了怎么會(huì)事了吧,原來這個(gè)查詢是走的索引覆蓋,沒有在進(jìn)行回表讀取原數(shù)據(jù)。另外,也在此說明,Innodb二索索引包含了主鍵存儲(chǔ)。
來繼續(xù)證明一下:

看到using index 吧,表示這個(gè)查詢利用索引查詢出來結(jié)果,不用讀取原表。
那么我們給造一個(gè)通過主鍵讀取數(shù)據(jù)操作:
select * from zst_t1 use index(primary);

select * from zst_t1 use index(primary); #確認(rèn)一下。

總結(jié):
這個(gè)其實(shí)就是一個(gè)索引包含的查詢案例。 如果靜下來思考一下,也許很快就明白了。也不用這樣去查問題。
技術(shù)在于折騰,多搞搞就明白了:)。
- 可以改善mysql性能的InnoDB配置參數(shù)
- MySQL Innodb表導(dǎo)致死鎖日志情況分析與歸納
- mysql更改引擎(InnoDB,MyISAM)的方法
- MySQL不支持InnoDB的解決方法
- Mysql啟動(dòng)中 InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes 的問題
- 淺談MySQL存儲(chǔ)引擎選擇 InnoDB與MyISAM的優(yōu)缺點(diǎn)分析
- Xtrabackup使用指南 InnoDB數(shù)據(jù)備份工具
- MYSQL無法啟動(dòng)提示: Default storage engine (InnoDB) is not available的解決方法
- MySQL數(shù)據(jù)庫INNODB表損壞修復(fù)處理過程分享
相關(guān)文章
windows環(huán)境下mysql數(shù)據(jù)庫的主從同步備份步驟(單向同步)
本文主要是向大家描述的是在windows環(huán)境之下實(shí)現(xiàn)MySQL數(shù)據(jù)庫的主從同步備份的正確操作方案,以下就是文章的詳細(xì)內(nèi)容描述2011-05-05
golang實(shí)現(xiàn)mysql數(shù)據(jù)庫備份的操作方法
這篇文章主要介紹了golang實(shí)現(xiàn)mysql數(shù)據(jù)庫備份的操作方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06
MySQL創(chuàng)建和刪除數(shù)據(jù)表的命令及語法詳解
這篇文章主要介紹了MySQL創(chuàng)建和刪除數(shù)據(jù)表的命令及語法,是MySQL入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-11-11
獲取MySQL數(shù)據(jù)表列信息的三種方法實(shí)現(xiàn)
本文介紹了獲取MySQL數(shù)據(jù)表列信息的三種方法實(shí)現(xiàn),包含SHOWCOLUMNS命令、DESCRIBE命令以及查詢INFORMATION_SCHEMA.COLUMNS表,具有一定的參考價(jià)值,感興趣的可以了解一下2024-12-12
mysql?in索引慢查詢優(yōu)化實(shí)現(xiàn)步驟解析
這篇文章主要為大家介紹了mysql?in慢查詢優(yōu)化實(shí)現(xiàn)步驟的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
mysql中數(shù)據(jù)庫覆蓋導(dǎo)入的幾種方式總結(jié)
這篇文章主要介紹了mysql中數(shù)據(jù)庫覆蓋導(dǎo)入的幾種方式總結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
mysql數(shù)據(jù)庫中字符集亂碼問題原因及解決
這篇文章主要介紹了mysql數(shù)據(jù)庫中字符集亂碼問題原因及解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
使用logrotete定時(shí)切割mysql的慢日志操作
本文介紹了如何在Linux系統(tǒng)中使用logrotate工具對MySQL慢查詢?nèi)罩具M(jìn)行自動(dòng)輪轉(zhuǎn)和管理配置,包括創(chuàng)建配置文件、設(shè)置輪轉(zhuǎn)頻率、文件命名、權(quán)限、執(zhí)行腳本以及測試配置的方法,感興趣的朋友一起看看吧2025-03-03

