中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

MySQL數據庫中怎么優化索引查詢

發布時間:2021-08-13 16:28:29 來源:億速云 閱讀:147 作者:Leah 欄目:數據庫

這篇文章給大家介紹MySQL數據庫中怎么優化索引查詢,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

問題描述:
我們要訪問的表是一個非常大的表,四千萬條記錄,id是主鍵,program_id上建了索引。
執行一條SQL:

select * from program_access_log where program_id between 1 and 4000
這條SQL非常慢。
我們原以為處理記錄太多的原因,所以加了id限制,一次只讀五十萬條記錄

select * from program_access_log where id between 1 and 500000 and program_id between 1 and 4000
但是這條SQL仍然很慢,速度比上面一條幾乎沒有提升。
Mysql處理50萬條記錄的表,條件字段還建了索引,這條語句應該是瞬間完成的。

問題分析:
這張表大約容量30G,服務器內存16G,無法一次載入。就是這個造成了問題。
這條SQL有兩個條件,ID一到五十萬和Program_id一到四千,因為program_id范圍小得多,選擇它做為主要索引。
先通過索引文件找出了所有program_id在1到4000范圍里所有的id,這個過程非常快。
接下來要通過這些id找出表里的記錄,由于這些id是離散的,所以mysql對這個表的訪問不是順序讀取。
而這個表又非常大,無法一次裝入內存,所以每訪問一條記錄mysql都要重新在磁盤上定位并把附近的記錄都載入內存,大量的IO操作導致了速度的下降。

問題解決方案:
1. 以program_id為條件對表進行分區
2. 分表處理,每張表的大小不超過內存的大小
然而,服務器用的是mysql5.0,不支持分區,而且這個表是公共表,無法在不影響其它項目的條件下修改表的結構。
所以我們采取了第三種辦法:

select * from program_access_log where id between 1 and 500000 and program_id between 1 and 15000000
現在program_id的范圍遠大于id的范圍,id被當做主要索引進行查找,由于id是主鍵,所以查找的是連續50萬條記錄,速度和訪問一個50萬條記錄的表基本一樣

關于MySQL數據庫中怎么優化索引查詢就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

永年县| 青冈县| 贵德县| 青田县| 舞阳县| 绍兴县| 安康市| 宁南县| 岑溪市| 安庆市| 刚察县| 肇庆市| 留坝县| 鹤壁市| 喜德县| 喀喇沁旗| 陆川县| 无极县| 西充县| 阿克陶县| 岱山县| 华坪县| 新巴尔虎左旗| 紫金县| 电白县| 璧山县| 禹州市| 九江市| 大渡口区| 贵溪市| 敖汉旗| 阜城县| 体育| 双流县| 萝北县| 博客| 南丰县| 元朗区| 武城县| 杂多县| 饶河县|