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...