日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

论MySQL何时使用索引,何时不使用索引

發布時間:2025/6/15 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 论MySQL何时使用索引,何时不使用索引 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

 索引:

  使用索引可快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種結構,例如 employee 表的姓(name)列。如果要按姓查找特定職員,與必須搜索表中的所有行相比,索引會幫助您更快地獲得該信息。

  索引是一個單獨的、物理的數據庫結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的數據頁的邏輯指針清單。

  索引提供指向存儲在表的指定列中的數據值的指針,然后根據您指定的排序順序對這些指針排序。數據庫使用索引的方式與您使用書籍中的索引的方式很相似:它搜索索引以找到特定值,然后順指針找到包含該值的行。

  在數據庫關系圖中,您可以在選定表的“索引/鍵”屬性頁中創建、編輯或刪除每個索引類型。當保存索引所附加到的表,或保存該表所在的關系圖時,索引將保存在數據庫中。

  注意:

  并非所有的數據庫都以相同的方式使用索引。作為通用規則,只有當經常查詢索引列中的數據時,才需要在表上創建索引。索引占用磁盤空間,并且降低添加、刪除和更新行的速度。在多數情況下,索引用于數據檢索的速度優勢大大超過它的不足之處。但是,如果應用程序非常頻繁地更新數據或磁盤空間有限,則可能需要限制索引的數量。

  可以基于數據庫表中的單列或多列創建索引。多列索引使您可以區分其中一列可能有相同值的行。

  如果經常同時搜索兩列或多列或按兩列或多列排序時,索引也很有幫助。例如,如果經常在同一查詢中為姓和名兩列設置判據,那么在這兩列上創建多列索引將很有意義。

  確定索引的有效性:

  ● 檢查查詢的 WHERE 和 JOIN 子句。在任一子句中包括的每一列都是索引可以選擇的對象。

  ● 對新索引進行試驗以檢查它對運行查詢性能的影響。

  ● 考慮已在表上創建的索引數量。最好避免在單個表上有很多索引。

  ● 檢查已在表上創建的索引的定義。最好避免包含共享列的重疊索引。

  ● 檢查某列中唯一數據值的數量,并將該數量與表中的行數進行比較。比較的結果就是該列的可選擇性,這有助于確定該列是否適合建立索引,如果適合,確定索引的類型。

  MySQL何時使用索引

  對一個鍵碼使用>, >=, =, <, <=, IF NULL和BETWEEN

  • SELECT?*?FROM?table_name?WHERE?key_part1=1?and?key_part2?>?5;?
  • SELECT?*?FROM?table_name?WHERE?key_part1?IS?NULL;

  當使用不以通配符開始的LIKE

SELECT?*?FROM?table_name?WHERE?key_part1?LIKE?'jani%'

  在進行聯結時從另一個表中提取行時

SELECT?*?from?t1,t2?where?t1.col=t2.key_part

  找出指定索引的MAX()或MIN()值

SELECT?MIN(key_part2),MAX(key_part2)?FROM?table_name?where?key_part1=10

  一個鍵碼的前綴使用ORDER BY或GROUP BY

SELECT?*?FROM?foo?ORDER?BY?key_part1,key_part2,key_part3

  在所有用在查詢中的列是鍵碼的一部分時間

SELECT?key_part3?FROM?table_name?WHERE?key_part1=1

------------------------------------------------------------------------------------------------------------------------------------

  MySQL何時不使用索引

  如果MySQL能估計出它將可能比掃描整張表還要快時,則不使用索引。例如如果key_part1均勻分布在1和100之間,下列查詢中使用索引就不是很好:

SELECT?*?FROM?table_name?where?key_part1?>?1?and?key_part1?<?90

  如果使用HEAP表且不用=搜索所有鍵碼部分。

  在HEAP表上使用ORDER BY。

  如果不是用鍵碼第一部分

SELECT?*?FROM?table_name?WHERE?key_part2=1

  如果使用以一個通配符開始的LIKE

SELECT?*?FROM?table_name?WHERE?key_part1?LIKE?'%jani%'

  搜索一個索引而在另一個索引上做ORDER BY

SELECT?*?from?table_name?WHERE?key_part1?=?#?ORDER?BY?key2
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的论MySQL何时使用索引,何时不使用索引的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。