mysql中的覆蓋索引,二級索引和索引排序

2022-09-16 21:33:33 字數 823 閱讀 5431

mysql覆蓋索引,也叫包含索引,通過檢視explain中extra列是否有using index判斷是否使用覆蓋索引。因為覆蓋索引要儲存索引列的值,所以雜湊索引,空間索引,全文索引都不儲存索引列的值,mysql只能使用b-tree索引做覆蓋索引。如果select查詢只使用少部分列,可以把這些列放在索引後面,搞成聯合索引,這樣查詢時,把這些列帶上,成為覆蓋索引,提高查詢效能。

innodb的二級索引也就非主鍵索引,有唯一索引(值可以為空)、普通索引、字首索引等。二級索引只儲存了主鍵值,相比於聚簇索引,占用的空間要少,意味著innodb的二級索引可以利用這些額外的主鍵列來做覆蓋索引,select actor_id,last_name from table where last_name='ss'(其中actor_id是主鍵列,last_name是二級索引列)。

mysql中innodb在二級索引上使用共享鎖,但訪問主鍵索引需要排他鎖。

延遲關聯就是使用覆蓋索引查詢返回需要的主鍵,再根據這些主鍵關聯原表獲得需要的行,這個過程就是回表,這樣減少mysql掃瞄那些需要丟棄的行,select … from … where id>(select id from … where …)或者select … from a inner join (select id from a where … order by … limit 100000, 10) as x using id;

只有當索引的列順序和order by子句的順序完全一致,mysql才能夠使用索引做排序,還有滿足最左字首匹配原則,如果不滿足可以指定索引列的值為常量,也可以使用聯合索引,第乙個列是常量t,第二列m進行排序,select … from … where t='' order by m desc;

mysql二級索引

聚集索引葉子節點存放記錄 非聚集索引葉子節點存放key和主鍵資訊 二級索引查詢比聚集索引慢,需要回表 iot表 拆表人肉回表 myisam索引是堆表 也是有序的 myisam主鍵和唯一索引的效率相當,不需要再回表 資料檔案位址修改了,iot不需要修改 myisam適合讀的應用 innodb適合寫 i...

mysql索引,雜湊索引,聚集索引,二級索引

雜湊索引 雜湊索引,只有精確匹配索引所有列的查詢才有效,對於每一行資料,儲存引擎都會對所有的索引計算乙個雜湊碼。雜湊索引將所有的雜湊碼儲存在索引中,同時在雜湊表中儲存指向每個資料行的指標。如果多個列的雜湊值相同,索引會以鍊錶的方式存放多個指標記錄到同乙個雜湊條目中。因為索引自身只儲存對應的雜湊值,所...

建立二級索引 索引 一 Mysql建立索引

假如,乙個 薄裡面包含了乙個城市的所有人的姓名和 號碼。那麼,想找到bob cat的 號碼,另外我們知道 簿中名字是按照字母順序排列的,所以首先要查詢姓氏為cat的頁面,然後在這個頁面下查詢名字為bob的 號碼。那如果在 薄中的名字沒有按照字母排列,就需要去瀏覽所有的頁,然後在裡面查詢每個姓名直到找...