mysql 3列索引 mysql之多列索引

2021-10-17 17:37:39 字數 1855 閱讀 9046

mysql的多列索引是經常會遇到的問題,怎樣才能有效命中索引,是本文要**的重點。

多列索引使用的btree,也就是平衡二叉樹。簡單來說就是排好序的快速索引方式。它的原則就是要遵循左字首索引。

多個索引從左邊往右都使用上,才能使用到整個多列索引。

下面我先建立乙個簡單的表做實驗:

create table t6 (

c1 char(1) not null default '',

c2 char(1) not null default '',

c3 char(1) not null default '',

c4 char(1) not null default '',

c5 char(1) not null default '',

key(c1,c2,c3,c4,c5)

) engine myisam charset utf8;

再分別insert into一些資料。

分別做以下一些查詢:

1.explain select * from t6 where c1='a' and c2='b' and c4>'a' and c3="c" \g;

*************************** 1. row ***************************

id: 1

select_type: ******

table: t6

type: range

possible_keys: c1

key: c1

key_len: 12

ref: null

rows: 2

extra: using where

1 row in set (0.00 sec)

這裡使用到了c1,c2,c3,c4索引,特別c4是乙個範圍查詢,所以type為range,依次c1,c2,c3被命中索引。

explain select * from t6 where c1='a' and c4='a' order by c3,c2 \g

*************************** 1. row ***************************

id: 1

select_type: ******

table: t6

type: ref

possible_keys: c1

key: c1

key_len: 3

ref: const

rows: 2

extra: using where; using filesort

1 row in set (0.00 sec)

過程中先命中了c1,然後在order by c3,c2的時候由於先去use c3做排序,從而聯合索引斷了。using filesort表明沒有使用到多列合索引,而是做了檔案內排序。

explain select * from t6 where c1='a' and c4='a' order by c2,c3 \g

*************************** 1. row ***************************

id: 1

select_type: ******

table: t6

type: ref

possible_keys: c1

key: c1

key_len: 3

ref: const

rows: 2

extra: using where

1 row in set (0.00 sec)

反之命中c1索引後,先用c2排序,再是c3來排序,分別命中,最後是c4='a'做where查詢,使用到了多列索引。

mysql 3 備份恢復

先檢視資料庫表的資料,這裡面時000001裡面的資料 將資料以sql的形式備份到 tmp目錄下,備份的是000001的資料 mysqldump uroot mysql l f tmp mysql1.sql l 鎖表,在備份的時候不讓其他客戶端運算元據庫,以免備份資料不完整 f 即flush logs...

mysql 3 事務隔離

1.事務就是要保證一組資料庫操作,要麼全部成功,要麼全部失敗 2.在 mysql 中,事務支援是在引擎層實現的 3.mysql 是乙個支援多引擎的系統,但並不是所有的引擎都支援事務。比如 mysql 原生的 myisam 引擎就不支援事務,這也是 myisam 被 innodb 取代的重要原因之一。...

mysql 3 資料型別

mysql 中定義資料欄位的型別對你資料庫的優化是非常重要的。mysql 支援多種型別,大致可以分為三類 數值 日期 時間和字串 字元 型別。邏輯性對應 boolean 關鍵字int 是integer 的同義詞,關鍵字 dec是 decimal 的同義詞。bit資料型別儲存位字段值,並且支援 myi...