Mysql 索引問題

2021-10-08 04:13:17 字數 833 閱讀 2695

①行鎖開銷大,鎖表慢,但高併發下相比之下效能更高(因為範圍小,影響範圍小,衝突概率小);

②表鎖雖然開銷小,鎖表快,但高併發下效能低(一句話一刀切,速度快,影響範圍大,更易衝突導致等待);

③innodb只有在通過索引條件檢索資料時使用行級鎖,否則使用表鎖;

④innodb的行鎖是【針對索引加的鎖】,不是針對記錄加的鎖。並且該索引不能失效,否則都會從行鎖公升級為表鎖;

⑤大量對一張表使用行鎖,會導致事務執行效率低,mysql執行引擎會放棄使用行鎖,而採取表鎖;

1、like 以%開頭,索引無效;當like字首沒有%,字尾有%時,索引有效;

2、or語句前後沒有同時使用索引。當or左右查詢字段只有乙個是索引,該索引失效,只有當or左右查詢欄位均為索引時,才會生效;

3、組合索引,不是使用第一列索引,索引失效;

4、資料型別出現隱式轉化。如varchar不加單引號的話可能會自動轉換為int型,使索引無效,產生全表掃瞄;

5、在索引列上使用 is null 或 is not null操作。索引是不索引空值的,所以這樣的操作不能使用索引,可以用其他的辦法處理,例如:數字型別,判斷大於0,字串型別設定乙個預設值,判斷是否等於預設值即可;

6、在索引欄位上使用not,<>,!=。不等於操作符是永遠不會用到索引的,因此對它的處理只會產生全表掃瞄。 優化方法: key<>0 改為 key>0 or key<0;

7、對索引字段進行計算操作、欄位上使用函式;

例如:索引為 emp(ename,empno,sal),查詢 select * from emp where ename='王友亮'

8、當全表掃瞄速度比索引速度快時,mysql會使用全表掃瞄,此時索引失效;

Mysql索引問題

首先明白為什麼索引會增加速度,db在執行一條sql語句的時候,預設的方式是根據搜尋條件進行全表掃瞄,遇到匹配條件的就加入搜尋結果集合。如果我們對某一欄位增加索引,查詢時就會先去索引列表中一次定位到特定值的行數,大大減少遍歷匹配的行數,所以能明顯增加查詢的速度。那麼在任何時候都應該加索引麼?這裡有幾個...

MySQL索引的索引長度問題

mysql索引的索引長度問題 specified key was too long max key length is 1000 bytes.一 修改mysql的預設儲存引擎 1 檢視mysql儲存引擎命令,在mysql 提示符下搞入show engines 字段 support為 default表...

MySQL索引的索引長度問題

mysql的每個單錶中所建立的索引長度是有限制的,且對不同儲存引擎下的表有不同的限制。在myisam表中,建立組合索引時,建立的索引長度不能超過1000,注意這裡索引的長度的計算是根據表字段設定的長度來標量的,例如 create table test id int,name1 varchar 300...