mysql 索引使用教程


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 connect

def 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;
  • 查找第1萬條數據ha-99999
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. 建立索引要創建在常用的查詢字段上,並且根據自己的需求建立說因數量

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM