mysql資料量很少查詢卻很慢 Mysql索引

2021-10-12 21:09:48 字數 2300 閱讀 4839

1. 思考

在圖書館中是如何找到一本書的?

一般的應用系統對比資料庫的讀寫比例在10:1左右(即有10次查詢操作時有1次寫的操作),

而且插入操作和更新操作很少出現效能問題,

遇到最多、最容易出問題還是一些複雜的查詢操作,所以查詢語句的優化顯然是重中之重

2. 解決辦法

當資料庫中資料量很大時,查詢資料會變得很慢

優化方案:索引

3. 索引是什麼

索引是一種特殊的檔案(innodb資料表上的索引是表空間的乙個組成部分),它們包含著對資料表裡所有記錄的引用指標。

更通俗的說,資料庫索引好比是一本書前面的目錄,能加快資料庫的查詢速度

4. 索引目的

索引的目的在於提高查詢效率,可以模擬字典,如果要查「mysql」這個單詞,我們肯定需要定位到m字母,然後從下往下找到y字母,再找到剩下的sql。如果沒有索引,那麼你可能需要把所有單詞看一遍才能找到你想要的,如果我想找到m開頭的單詞呢?或者ze開頭的單詞呢?是不是覺得如果沒有索引,這個事情根本無法完成?

5. 索引原理

除了詞典,生活中隨處可見索引的例子,如火車站的車次表、圖書的目錄等。它們的原理都是一樣的,通過不斷的縮小想要獲得資料的範圍來篩選出最終想要的結果,同時把隨機的事件變成順序的事件,也就是我們總是通過同一種查詢方式來鎖定資料。

資料庫也是一樣,但顯然要複雜許多,因為不僅面臨著等值查詢,還有範圍查詢(>、

6. 索引的使用

檢視索引

show index from 表名;
建立索引

如果指定欄位是字串,需要指定長度,建議長度與定義欄位時的長度一致

字段型別如果不是字串,可以不填寫長度部分

create index 索引名稱 on 表名(欄位名稱(長度))
刪除索引:

drop index 索引名稱 on 表名;
7. 索引demo7.1. 建立測試表testindex

create table test_index(title varchar(10));
7.2 使用python程式(ipython也可以)通過pymsql模組 向表中加入十萬條資料

from pymysql import connectdef main(): # 建立connection連線 conn = connect(host='localhost',port=3306,database='jing_dong',user='root',password='mysql',charset='utf8') # 獲得cursor物件 cursor = conn.cursor() # 插入10萬次資料 for i in range(100000): cursor.execute("insert into test_index values('ha-%d')" % i) # 提交資料 conn.commit()if __name__ == "__main__": main()
7.3. 查詢開啟執行時間監測:

set profiling=1;
查詢第1萬條資料ha-99999

select * from test_index where ;
show profiles;
為表title_index的title列建立索引:

create index title_index on test_index(title(10));
執行查詢語句:

select * from test_index where ;
再次檢視執行的時間

show profiles;
要注意的是,建立太多的索引將會影響更新和插入的速度,因為它需要同樣更新每個索引檔案。對於乙個經常需要更新和插入的**,就沒有必要為乙個很少使用的where字句單獨建立索引了,對於比較小的表,排序的開銷不會很大,也沒有必要建立另外的索引。

建立索引會占用磁碟空間

MYSQL查詢表資料量

1.最常用的 select count from 表名 查的準確,但是資料量大的話 超過100萬 比較慢。2.網上找了一種,據說比count 快,自測沒驗證。select sql calc found rows 1 from 表名 limit 1 select found rows as rowco...

資料量很大,分頁查詢很慢,怎麼優化?

當需要從資料庫查詢的表有上萬條記錄的時候,一次性查詢所有結果會變得很慢,特別是隨著資料量的增加特別明顯,這時需要使用分頁查詢。對於資料庫分頁查詢,也有很多種方法和優化的點。下面簡單說一下我知道的一些方法。為了對下面列舉的一些優化進行測試,下面針對已有的一張表進行說明。select count fro...

資料量很大,分頁查詢很慢,怎麼優化?

當需要從資料庫查詢的表有上萬條記錄的時候,一次性查詢所有結果會變得很慢,特別是隨著資料量的增加特別明顯,這時需要使用分頁查詢。對於資料庫分頁查詢,也有很多種方法和優化的點。下面簡單說一下我知道的一些方法。為了對下面列舉的一些優化進行測試,下面針對已有的一張表進行說明。select count fro...