標籤:utf8 class 除了 磁碟空間 from 順序 file 一段 檔案
1.什麼索引
索引是一種特殊的檔案(InnoDB資料表上的索引是資料表空間的一個組成部分),它們包含著對資料表裡所有記錄的位置資訊。更通俗的說,資料庫索引好比是一本書前面的目錄,能加快資料庫的查詢速度.
2.索引工作原理
除了詞典,生活中隨處可見索引的例子,如火車站的車次表、圖書的目錄等。它們的原理都是一樣的,通過不斷的縮小想要獲得資料的範圍來篩選出最終想要的結果,同時把隨機的事件變成順序的事件,也就是我們總是通過同一種尋找方式來鎖定資料。
資料庫也是一樣,但顯然要複雜許多,因為不僅面臨著等值查詢,還有範圍查詢(>、<、between、in)、模糊查詢(like)、並集查詢(or)等等。資料庫應該選擇怎麼樣的方式來應對所有的問題呢?我們回想字典的例子,能不能把資料分成段,然後分段查詢呢?最簡單的如果1000條資料,1到100分成第一段,101到200分成第二段,201到300分成第三段……這樣查第250條資料,只要找第三段就可以了,一下子去除了90%的無效資料。
3.查看一個表中是否已經建立索引
show index from 表名;
4.建立索引(如果指定欄位是字串,需要指定長度,建議長度與定義欄位時的長度一致,欄位類型如果不是字串,可以不填寫長度部分)
create index 索引名 on 資料表(欄位名稱長度)
5.刪除索引
drop index 索引名稱 on 資料表
6.測試資料表是否能加快查詢速度6.1建立一個資料表
create table my_index(title varchar(10));
6.2 插入資料
from pymysql import connectdef main(): # 建立Connection串連 conn = connect(host=‘localhost‘,port=3306,database=‘python_test_1‘,user=‘root‘,password=‘xu666666‘,charset=‘utf8‘) # 獲得Cursor對象 cursor = conn.cursor() # 插入10萬次資料 for i in range(100000): cursor.execute("insert into my_index values(‘ha-%d‘)" % i) # 提交資料 conn.commit()if __name__ == "__main__": main()6.3 開始查詢並啟動時間檢測
set profiling=1;
select * from my_index where title=‘ha-99999‘;
show profiles;
- 為表title_index的title列建立索引:
create index test_index on my_index(title(10));
select * from my_index where title=‘ha-99999‘;
show profiles;
6.4 測試結果
注意
1.索引可以明顯提高某些欄位的查詢效率,但不能加快插入,更新,刪除資料的效率,相反由於每次資料表資料的更改都會讓索引重新排列,會降低效率
2.要注意的是,建立太多的索引將會影響更新和插入的速度,因為它需要同樣更新每個索引檔案。對於一個經常需要更新和插入的表格,就沒有必要為一個很少使用的where字句單獨建立索引了,對於比較小的表,排序的開銷不會很大,也沒有必要建立另外的索引。建立索引會佔用磁碟空間。
3. 建立索引要建立在常用的查詢欄位上,並且根據自己的需求建立說因數量
mysql 索引使用教程