1. 程式人生 > >MySql索引失效的例子和不適合新增索引的情況

MySql索引失效的例子和不適合新增索引的情況

索引一失效情況:

1、 對單欄位建了索引,where條件多欄位。

2、  對索引列運算,運算包括(+、-、*、/、!、<>、%、like'%_'(%放在前面)、or、in、exist等),導致索引失效。

3、型別錯誤,如欄位型別為varchar,where條件用number。

4、為null值的時候索引會失效,可以用函式代替掉null,儘量不要讓資料允許為空

SELECT *,sal+IFNULL(comm,0) FROMemp;

5、where 子句中對欄位進行表示式操作,這將導致引擎放棄使用索引而進行全表掃描

select id from t where num/2 = 100可以改為select id from t where num = 100*2

不使用索引情況:

第一,對於那些在查詢中很少使用或者參考的列不應該建立索引。這是因為,既然這些列很少使用到,因此有索引或者無索引,並不能提高查詢速度。相反,由於增加了索引,反而降低了系統的維護速度和增大了空間需求。

第二、對於那些只有很少資料值的列也不應該增加索引。這是因為,由於這些列的取值很少,例如人事表的性別列,在查詢的結果中,結果集的資料行佔了表中資料行的很大比例,即需要在表中搜索的資料行的比例很大。增加索引,並不能明顯加快檢索速度。

第三。對於那些定義為text, image和bit資料型別的列不應該增加索引。這是因為,這些列的資料量要麼相當大,要麼取值很少。

第四。當修改效能遠遠大於檢索效能時,不應該建立索引。這是因為,修改效能和檢索效能是互相矛盾的。當增加索引時,會提高檢索效能,但是會降低修改效能。當減少索引時,會提高修改效能,降低檢索效能。因此,當修改效能遠遠大於檢索效能時,不應該建立索引。

相關推薦

MySql索引失效例子適合新增索引情況

索引一失效情況:1、 對單欄位建了索引,where條件多欄位。2、  對索引列運算,運算包括(+、-、*、/、!、<>、%、like'%_'(%放在前面)、or、in、exist等),導致索引失效。3、型別錯誤,如欄位型別為varchar,where條件用numb

mysql優化一:大資料查詢新增索引

一、索引是什麼? 索引是一種特殊的檔案(InnoDB資料表上的索引是表空間的一個組成部分),它們包含著對資料表裡所有記錄的引用指標。 更通俗的說,資料庫索引好比是一本書前面的目錄,能加快資料庫的查詢速度 二、索引目的 索引的目的在於提高查詢效率 三、索引原理 通過不斷的縮小想

[InnoDB]性別欄位為什麼適合索引

表結構與資料 id為主鍵,id為奇數sex=1,id為偶數sex=0 sex=0,50000條資料;sex=1,50000條資料 CREATE TABLE `people` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,

Dos編碼格式的轉換&&資料庫MySQL(Navicat軟體)新增外來鍵的問題

解決1. 輸入chcp 936 轉為gbk編碼 輸入chcp 65001 轉為UTF-8格式。在這種格式下不能輸入中文。 解決2. 如果在Navicat中新增外來鍵消失的情況,可以在設計表的時候要把選項裡的引擎設定為InnoDB,因為InnoDB提供事物

mysql where 加引號加引號

我建立的測試表是這樣子的: 程式碼如下 複製程式碼 CREATE TABLE `foo` ( `key` VARCHAR(10) NOT NULL, `time` INT(11) NOT NULL, PRIMARY KEY (`key`

聚簇索引(Clustered Index)非聚簇索引 (Non- Clustered Index)

索引的重要性 資料庫效能優化中索引絕對是一個重量級的因素,可以說,索引使用不當,其它優化措施將毫無意義。聚簇索引(Clustered Index)和非聚簇索引 (Non- Clustered Index) 最通俗的解釋是:聚簇索引的順序就是資料的物理儲存順序,而對非聚簇索引的

資料庫索引的作用優點缺點以及索引的11中用法

為什麼要建立索引呢?這是因為,建立索引可以大大提高系統的效能。 第一,通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。 第二,可以大大加快 資料的檢索速度,這也是建立索引的最主要的原因。 第三,可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義。 第四,在

mysql索引之三:索引使用注意規則(索引失效--存在索引使用索引)*

使用索引時,有以下一些技巧和注意事項: (1)越小的資料型別通常更好:越小的資料型別通常在磁碟、記憶體和CPU快取中都需要更少的空間,處理起來更快。(2)簡單的資料型別更好:整型資料比起字元,處理開銷更小,因為字串的比較更復雜。在MySQL中,應該用內建的日期和時間資料型別,而不是用字串來儲存時間;以及用整

mysql索引學習(1)常見索引索引失效

介紹 1.什麼是索引? 一般的應用系統,讀寫比例在10:1左右,而且插入操作和一般的更新操作很少出現效能問題,在生產環境中,

MySQL索引使用方法性能優化

lec 兩種 允許 聯合查詢 網站 大小 磁盤 會有 har 關於MySQL索引的好處,如果正確合理設計並且使用索引的MySQL是一輛蘭博基尼的話,那麽沒有設計和使用索引的MySQL就是一個人力三輪車。對於沒有索引的表,單表查詢可能幾十萬數據就是瓶頸,而通常大型網站單日就可

mysql索引總結(3)-MySQL聚簇索引非聚簇索引

部分 inno ext 找到 存儲位置 sso 影響 直接 支持 非聚簇索引 索引節點的葉子頁面就好比一片葉子。葉子頭便是索引鍵值。 先創建一張表: CREATE TABLE `user` ( `id` INT NOT NULL , `name` VARCHAR NOT

mysql中的鍵索引

mysql中的鍵和索引一、主鍵 索引 關系 1.主鍵:主鍵的唯一作用就是唯一標識表中的某一行數據。分為單一主鍵和聯合主鍵:單一主鍵:只用一列就能唯一標識一行。聯合主鍵:當使用一列已經不能唯一標示一行的時候,就要采用多列唯一標識一行,就是聯合主鍵。聯合主健多個字段不能同時相同 2.索引:索引的作用就是提高數據的

MySQL索引失效的幾種情況

模糊 運算 全表掃描 mysq 子節點 葉子節點 數據 都是 記錄 1.索引不存儲null值 更準確的說,單列索引不存儲null值,復合索引不存儲全為null的值。索引不能存儲Null,所以對這列采用is null條件時,因為索引上根本 沒Null值,不能利用到索引,只能全

【mybatis】mybatis中insert 主鍵自增自增的插入情況mysql

pro SQ class TE IV rop generate mys bat 主鍵不自增:返回值是插入的條數 <insert id="add" parameterType="EStudent"> insert into TStudent(name,

MySQL優化(5):索引失效分析、in與exists使用場合

有一個 來替 null 決定 index idt class 分布 family 一、索引失效的情況   前文提及過可以通過explain的possible_keys、key屬性判斷索引是否失效,key如果為null,可能是索引沒建,也可能是索引失效,下面列舉一些會使索引失

mysql 開發基礎系列15 索引的設計使用

hash索引 drop myisam mar 至少 不同類 不同 執行 例如 一.概述   所有mysql 列類型都可以被索引,是提高select查詢性能的最佳方法。 根據存儲引擎可以定義每個表的最大索引數和最大索引長度,每種引擎對每個表至少支持16個索引,總索引長度至少為

mysql索引失效

width 優化 c89 使用 files tle index ddd sha 一、成功的索引優化1.表數據如下:2.查詢語句如下:explain select id, age, level from employee where dpId = 1 and age = 30

MySQL主鍵與索引的區別聯系

效率 mysql 數據庫管理 但是 sql 多個 ron 主鍵 相同 關系數據庫依賴於主鍵,它是數據庫物理模式的基石。主鍵在物理層面上只有兩個用途: 惟一地標識一行。 作為一個可以被外鍵有效引用的對象。 索引是一種特殊的文件(InnoDB數據表上的索引是表空間的一個組成部分

mysql 預設分頁查詢,主鍵索引聯合唯一索引的坑

最近遇到一個比較坑的問題,列表分頁查詢的時候,查詢全部沒問題,根據條件查詢就會出現亂序,多頁之間有重複資料的問題。   因為用的通用mapper元件,於是打出來sql看了下,發現分頁查詢sql沒有order  by,結果查詢出來的順序是亂的,因為查詢條件之一是聯合唯一

【VUE元件開發】VUE隨意點選列表元素切換選中樣式,並有序陣列新增索引數值

直接檢視程式碼以及樣式 <template> <div> <!--頂部step--> <div class="dataStep"> <!--<img src="static