6 mysql索引 6 MySQL高階 索引

2021-10-17 23:34:11 字數 2541 閱讀 7285

索引

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. 索引demo

7.1. 建立測試表testindex

create table test_index(title varchar(10));

7.2 使用python程式(ipython也可以)通過pymsql模組 向表中加入十萬條資料

1 from pymysql importconnect2

3 defmain():4 #建立connection連線

5 conn = connect(host='localhost',port=3306,database='jing_dong',user='root',password='mysql',charset='utf8')6 #獲得cursor物件

7 cursor =conn.cursor()8 #插入10萬次資料

9 for i in range(100000):10 cursor.execute("insert into test_index values('ha-%d')" %i)11 #提交資料

12 conn.commit()13

14 if __name__ == "__main__":15 main()

7.3. 查詢

開啟執行時間監測:

set profiling=1;

查詢第1萬條資料ha-99999

select * from test_index where title='ha-99999';

show profiles;

為表title_index的title列建立索引:

create index title_index on test_index(title(10));

執行查詢語句:

select * from test_index where title='ha-99999';

再次檢視執行的時間

show profiles;

執行截圖:

1.將1萬條資料插入到test_index表中

2.開啟執行時間監測

3.輸入查詢語句,並輸出查詢時間

4.建立索引

5.建立索引後,輸入查詢語句,輸出查詢時間

比較:query_id 3 和 7

8. 注意:

要注意的是,建立太多的索引將會影響更新和插入的速度,因為它需要同樣更新每個索引檔案。

對於乙個經常需要更新和插入的**,就沒有必要為乙個很少使用的where字句單獨建立索引了,對於比較小的表,排序的開銷不會很大,也沒有必要建立另外的索引。

建立索引會占用磁碟空間.

6 mysql索引 6 MySQL索引種類

1 普通索引 這是最基本的索引,它沒有任何限制,比如上文中為title欄位建立的索引就是乙個普通索引,myiasm中預設的btree型別的索引,也是我們大多數情況下用到的索引。直接建立索引 create index index name on table name column length 修改表...

6 mysql索引 Mysql索引詳解

索引 儲存引擎用於快速找到記錄的一種資料結構。索引型別 索引有很多種型別,如 b tree索引 雜湊索引 空間資料索引r tree 全文索引 主鍵索引等,在mysql 中,索引是在儲存引擎層而不是伺服器層實現的。所以沒有統一的索引標準 不同儲存引擎的索引工作方式並 不一樣,也不是所有儲存引擎都支援所...

C 問題6 Mysql索引分類

mysql索引包括普通索引 唯一索引 全文索引 單列索引 多列索引 空間索引 即不應用任何限制條件的索引,該索引可以在任何資料型別中建立。字段本身的約束條件可以判斷其值是否為空或唯一。使用unique引數可以設定唯一索引。建立該索引時,索引的值必須唯一。主鍵是一種特殊唯一索引。使用fulltext引...