mysql索引 - mysql的表如何重新組織(或生成)索引?
問題描述
1,背景描述我有一個user表,表結(jié)構(gòu)如下:索引如下:
表中數(shù)據(jù)如下:
可以看到表中數(shù)據(jù)是按lastname排序的,這是因為在lastname, familyname, city上有一個多列索引,userid上的主鍵(索引)是后加的,所以userid是無序的。mysql當(dāng)中有沒有一種方法可以重新生成(或組織)索引,讓select userid, lastname from user這條語句的查詢結(jié)果默認(rèn)是按userid排序?
注意:不是強制使用索引select userid, lastname, from user force index(primary),而是重新生成或組織索引(reorganize)。
4月29日更新
其實,我這里是想問mysql是不是有某個命令可以對表中已有的索引進行重新組織,就是在表經(jīng)過一段時間的更新、刪除、插入操作后,數(shù)據(jù)會發(fā)生變化(結(jié)構(gòu)不變),那么表的索引也就相應(yīng)的會發(fā)生各種變化(比如底層的碎片等),那么是不是有一種方法可以對這些索引重新組織或者重新生成,再不然就只能刪除索引再重建索引。
5月2日更新我把最初提問的問題增加了刪除線,開始的提問有些問題,特別是這兒的描述是錯誤的:“可以看到表中數(shù)據(jù)是按lastname排序的,這是因為在lastname, familyname, city上有一個多列索引,userid上的主鍵(索引)是后加的,所以userid是無序的可以看到表中數(shù)據(jù)是按lastname排序的,這是因為在lastname, familyname, city上有一個多列索引,userid上的主鍵(索引)是后加的,所以userid是無序的”,至于為什么是無序的,@clcx_1315已經(jīng)回答了,而且他也指出即便重新組織(生成)索引,這句select userid, lastname from user也是無法實現(xiàn)讓userid有序的。我百度了下,mysql當(dāng)中好像沒有專門用于重新生成或組織索引的命令,sql server數(shù)據(jù)庫倒是有,感興趣的朋友百度吧。
問題解答
回答1:mysql有optimize table的用法,但是同時也把表重組了。如果系統(tǒng)有明顯的業(yè)務(wù)低峰期,刪掉索引重建也是可以的。
回答2:這種情況是因為你主鍵外的其他列是一個復(fù)合索引,你查詢的時候mysql就直接走索引表找到你的所有數(shù)據(jù)(mysql innodb普通索引會將主鍵信息一并存儲),所以就是按照你索引首字段排序檢索,他并不是按照錄入磁盤順序讀取全表的,而主鍵則是按照磁盤錄入順序添加的,因此在磁盤上是順序的,但是你讀取的時候讀的是索引表才會是不連續(xù)的要改變這種狀況的話你重建表也是一樣的,仍然會按lastname得索引排序,除非你按照lastname的順序錄入另外一個辦法就是添加一個冗余字段,這時候再select全表的時候就不會走你的覆蓋索引查詢而是走全表掃描,當(dāng)然就會主鍵漸順序排列了。
回答3:我記得mysql也會根據(jù)你的索引情況自動對索引進行重建,具體根據(jù)什么也沒查到。留待有緣人解答
相關(guān)文章:
1. html5 - angularjs中外部模版加載無法使用2. java - 安卓電視盒子取得了root權(quán)限但是不能安裝第三方應(yīng)用,請問該怎么辦?3. 我的Apache卡在這里不動了怎么辦?4. css3 - 請問一下在移動端CSS布局布局中通常需要用到哪些元素,屬性?5. 想寫一個python分析統(tǒng)計apache 日志文件的腳本6. javascript - js 寫一個正則 提取文本中的數(shù)據(jù)7. 老哥們求助啊8. javascript - [WDS] Disconnected! 一直重復(fù)出現(xiàn)。9. javascript - vue-router怎么不能實現(xiàn)跳轉(zhuǎn)呢10. python - 模擬滑動驗證碼,有源碼,求解
