資料庫建立索引以及索引失效問題

2021-08-08 16:37:39 字數 1309 閱讀 3929

運算元據庫索引能起到優化資料庫查詢,提高查詢效率的作用。並且對也稍微大一點的資料量的服務來說,索引的建立是必須的,也是關鍵的。但是索引也要合理應用,不要遇到查詢就建索引,也不能亂建。如果造成索引失效那還不如不建。索引失效有的時候是因為自己的語句問題造成的。下面是幾種造成索引失效的幾種原因, 

一、以下的方法會引起索引失效 

‍1,<> 

2,單獨的》,<,(有時會用到,有時不會) 

3,like "%_" 百分號在前. 

4,表沒分析. 

5,單獨引用復合索引裡非第一位置的索引列. 

6,字元型字段為數字時在where條件裡不新增引號. 

7,對索引列進行運算.需要建立函式索引. 

8,not in ,not exist. 

9,當變數採用的是times變數,而表的字段採用的是date變數時.或相反情況。 

10, 索引失效。 

11,基於cost成本分析(oracle因為走全表成本會更小):查詢小表,或者返回值大概在10%以上 

12,有時都考慮到了 但就是不走索引,drop了從建試試在 

13,b-tree索引 is null不會走,is not null會走,位圖索引 is null,is not null   都會走 

14,聯合索引 is not null 只要在建立的索引列(不分先後)都會走, 

in null時   必須要和建立索引第一列一起使用,當建立索引第一位置條件是is null 時,其他建立索引的列可以是is null(但必須在所有列都滿足is null的時候),或者=乙個值; 

當建立索引的第一位置是=乙個值時,其他索引列可以是任何情況(包括is null =乙個值),以上兩種情況索引都會走。其他情況不會走。 

強制使用索引

mysql常用的hint

對於經常使用oracle的朋友可能知道,oracle的hint功能種類很多,對於優化sql語句提供了很多方法。同樣,在mysql裡,也有類似的hint功能。下面介紹一些常用的。

強制索引 force index

複製**

**如下:

select * from table1 force index (field1) …

以上的sql語句只使用建立在field1上的索引,而不使用其它欄位上的索引。

忽略索引 ignore index

複製**

**如下:

select * from table1 ignore index (field1, field2) …

資料庫的優化之建立索引,以及SQL

在資料庫中,索引的含義與日常意義上的 索引 一詞並無多大區別 想想小時候查字典 它是用於提高資料庫表資料訪問速度的資料庫物件。a 索引可以避免全表掃瞄。多數查詢可以僅掃瞄少量索引頁及資料頁,而不是遍歷所有資料頁。b 對於非聚集索引,有些查詢甚至可以不訪問資料頁。c 聚集索引可以避免資料插入操作集中於...

資料庫索引 索引失效

以下情況不走索引 select from student where name like xiaoyao select from student where not score 100 select from student where score 100 select from student w...

資料庫索引失效問題

通俗的說,索引的作用就像目錄一樣,是與表或檢視關聯的磁碟上結構,可以加快從表或檢視中檢索行的速度。索引中包含由表或檢視中的一列或多列生成的鍵。這些鍵儲存在乙個結構 btree 中,使sql可以快速有效地查詢與鍵值關聯的行。這是因為,建立索引可以大大提高系統的效能。通過建立唯一性索引,可以保證給資料庫...