架構師素養養成(二) Mysql索引無效

2021-09-24 21:47:38 字數 1334 閱讀 3840

沈劍的

《架構師

之路系列

》\color

58沈劍的《

架構師之

路系列》

第一類:「列型別」與「where值型別」不符,不能命中索引,會導致值全表掃瞄。

create table table1(

cell varchar(3) primary key

) engine=innodb default charset=utf8;

插入測試資料

insert into table(cell) values('1'),('2'),('3');

測試語句

explain select * from table1 where cell=1;

explain select * from table1 where cell='1;'

答:

(1)第一條測試語句,where後的值的型別是整數型,與table1中的cell型別不一致;

(2)第二條測試語句,where後的值的型別是字串,與tabble1中的cell型別一致;

結論:

(1)強制型別轉換,不能命中索引,需要全表掃瞄,即3條記錄;

(2)型別相同,命中索引,1條記錄;

2.相join的兩個表的字元編碼不同,不能命中索引,會導致笛卡爾積的迴圈計算。

create table table2(

cell varchar(3) primary key

) engine=innodb default charset=latin1

插入測試資料

insert into table2(cell) values('1'),('2'),('3')('4')('5');
測試語句

explain select * from table1,table2 where table1.cell = table2.cell

結論:

相join時,連表table1與table2的字符集不同,關聯屬性是cell,而字符集不同,儲存空間就不同,所以table1會遍歷出3條記錄,tabel1的每一條記錄又要遍歷table2的所有記錄5條,實際進行了笛卡爾積迴圈計算 ,索引無效。

總結:

表列型別,與where的值型別不同;

join表的字元編碼不同

架構師素養

首先,架構師是技術領導,這意味著架構師除了擁有專門的技能外,還必須擁有領導才能。領導能力即體現在組織中的職位上,也體現在架構師展示的品質上。在組織的職位上,架構師是專案中的技術領導,應該擁有技術決策的權威。另一方面,專案經理更關注於管理在資源 進度和成本方面的專案計畫。架構師也應該參與到決定如何組建...

WEB架構師成長系列索引

本人致力於學習物件導向 設計模式 重構 極限程式設計 大型 架構設計 管理等知識,希望有不正確之處多多指出,共同學習提高,為了方便查閱,特做出索引一頁。序言web架構師成長之路之一 走正確的路 web架構師成長之路之二 大牛的法寶 web架構師成長之路之三 架構師都要懂哪些知識 第一篇 設計模式 什...

WEB架構師成長系列索引

原文 序言 web架構師成長之路之一 走正確的路 web架構師成長之路之二 大牛的法寶 web架構師成長之路之三 架構師都要懂哪些知識 第一篇 設計模式 什麼是物件,為什麼要物件導向,怎麼才能物件導向?物件導向基礎 設計模式培訓之一 為什麼要用單例模式?設計模式培訓之二 簡單工廠 工廠方法 設計模式...