亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中怎么優化千萬級數據表

發布時間:2021-08-03 18:02:13 來源:億速云 閱讀:162 作者:Leah 欄目:開發技術

MySQL中怎么優化千萬級數據表,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

我這里有張表,數據有1000w,目前只有一個主鍵索引

CREATE TABLE `user` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `uname` varchar(20) DEFAULT NULL COMMENT '賬號',
  `pwd` varchar(20) DEFAULT NULL COMMENT '密碼',
  `addr` varchar(80) DEFAULT NULL COMMENT '地址',
  `tel` varchar(20) DEFAULT NULL COMMENT '電話',
  `regtime` char(30) DEFAULT NULL COMMENT '注冊時間',
  `age` int(11) DEFAULT NULL COMMENT '年齡',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10000003 DEFAULT CHARSET=utf8;

MySQL中怎么優化千萬級數據表

查詢所有大概16s。可謂是相當慢了。通常我們一個后臺系統,比如這個是一個電商平臺,這個是用戶表。后臺管理系統,一般會查詢這些用戶信息,做一些操作,比如后臺直接新增用戶啊,或者刪除用戶啊這些操作。

所以這里就誕生了兩個需求,一個是查詢count,一個是分頁查詢

我們分別來測試一下count用的時間和分頁查詢所用的時間

select * from user limit 1, 10   //幾乎不用時
select * from user limit 1000000, 10  //0.35s
select * from user limit 5000000, 10  //1.7s
select * from user limit 9000000, 10  //2.8s
select count(1) from user  //1.7s

從上面查詢所用時間可以看出來,如果是分頁查詢的話,查詢的數據越往后用時是越長的,查詢count也需要1.7s。這顯然是不符合我們的要求的。所以,這里我們就需要優化。首先我們這里進行索引優化試試
首先看一下這是只有主鍵索引的執行計劃:

MySQL中怎么優化千萬級數據表

alter table `user` add INDEX `sindex` (`uname`,`pwd`,`addr`,`tel`,`regtime`,`age`)

MySQL中怎么優化千萬級數據表

看上面的執行計劃,雖然type是從all->index,走了sindex索引,但是實際上查詢速度并沒有發生改變。

其實,創建聯合索引,是為了有條件查詢的時候速度更快,而不是全表查詢

select * from user where uname='6.445329111484186' //3.5s(無聯合索引)
select * from user where uname='6.445329111484186' //0.003s(有聯合索引)

所以這就是有聯合索引和無索引的差距

這里基本上可以證明,加了索引和不加索引,進行全表查詢的時候,效率就是會很慢

既然索引這個結果已經不好使了,那就只能找其他方案了。根據我之前mysql面試里面講的,count我們可以單獨存儲到一個表里面

CREATE TABLE `attribute` (
  `id` int(11) NOT NULL,
  `formname` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '表名',
  `formcount` int(11) NOT NULL COMMENT '表總數據',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

MySQL中怎么優化千萬級數據表

這里說一下,這種表一般不會查所有,只會查詢一條,所以建表的時候,可以建成hash

select formcount from attribute where formname='user' //幾乎不用時

count就進行優化完了。如果上面有選擇條件的話,就可以建立索引,通過走索引篩選的形式來查詢,這樣就可以不用讀這個count了。

那么,count是沒問題了,分頁查詢優化要如何優化呢?這里可以使用子查詢來優化

select * from user where
id>=(select id from user limit 9000000,1) limit 10 //1.7s

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南涧| 台前县| 博罗县| 聂拉木县| 祁阳县| 耒阳市| 盱眙县| 尉犁县| 柏乡县| 资源县| 射阳县| 西畴县| 香港| 黎平县| 杨浦区| 兴文县| 青铜峡市| 新余市| 确山县| 乡城县| 白玉县| 恩平市| 汉川市| 乐安县| 富裕县| 虎林市| 托里县| 邵阳县| 翁牛特旗| 共和县| 若尔盖县| 舞阳县| 内丘县| 三台县| 安化县| 古交市| 随州市| 榆林市| 张北县| 黄梅县| 高陵县|