一、給資訊表建立索引
資訊表為:
建立索引:create index +索引名 on 表名(列名...);
mysql> create index idx_lname_pinyin on employee(lname_pinyin);
顯示索引資訊:show index from +表名;
mysql> show index from employee\g
show index 命令下的專案列表
專案名稱
說明table
物件表名
non_unique
是否允許重複(1:允許; 0:禁止)
key_name
索引名seq_in_index
內的域序號( 從1開始)
column_name
網域名稱collation
排序(a:公升序,null:不排序)
cardinality
索引內的非重複值的數目
sub_part
作為索引部分的域內的字元數目
packed
關鍵字壓縮方式
null
是否允許null
comment
索引的型別
index_comment
備註刪除索引:
drop index 索引名 on 表名
叢生索引:通常的索引在子葉節點中儲存指向實際表的指標,叢生索引儲存的子葉節點儲存的是實際資料
叢生索引的優點:
1、不需要為儲存索引而使用專門的硬碟空間,節約了資源
2、不需要檢索索引後再訪問實際的表,提高了索引效率
但是建立叢生索引時需要對錶中的資料進行排序,在進行資料插入、更新、刪除時比一般的索引需要耗費更多的時間
二、建立多列構成的復合索引及唯一性索引
mysql> create index idx_pinyin on employee(lname_pinyin,fname_pinyin);
三、確認資訊表索引的使用狀態,分析索引優劣
mysql> explain select *from employee where lname_pinyin='wang'\g
專案說明
說明id
select命令的序號(通常為1,子查詢的話往往從序號2開始)
select_type
select的命令種類
******
單純的select命令
primary
最外層的select命令
union
由union語句連線的select命令
dependent union
由union語句連線的select命令(依賴外部查詢)
subquery
子查詢中的select命令
dependent subquery
子查詢中的select命令(依賴外部查詢)
derived
派生表(from語句的子查詢)
table
表名type
表的連線型別
(按效率的高低排序)
system
只存在一條記錄的表(=系統表)
const
常量,擁有primary key/unique制約的索引(結果總為1行)
eq_ref
連線時由primary key/unique列進行的等值查詢
ref非unique列進行的等值查詢
ref_or_null
ref中加入了[~or列名is null]的檢索
range
使用索引檢查一定範圍的記錄(=,<>,>,>=,<,<=,is null,<>,between,in等運算子)
index
全索引掃瞄
all全表掃瞄
possible keys
檢索時可能使用到的索引(不存在索引時為null)
key檢索時真實使用到的索引(未使用索引時為null)
key_len
使用的索引的關鍵字長度(單位為bytes)
ref
需要時與比較的列,或者定製(const)
rows
需要遍歷的記錄數量
extra
查詢時的追加資訊 (值為index時,使用了覆蓋索引,效能最好)
四、索引時效的場合總結
1、進行後方一致/部分一致檢索的場合,模糊檢索是不能用索引的;
應盡量使用前方一致或者完全一致的形式進行檢索
如:select *from employee where lname_pinyin like '%w'; --是錯誤的
2、使用了is not null、[<>]比較運算子的場合,也不能使用索引
如:select *from employee where lname_pinyin is not null;--是錯的
3、對列使用了運算、函式的場合,也不能使用索引
如:select *from employee where year(birth)='1988';--這裡對birth這列使用了year函式
4、復合索引的第一列沒有包含在where條件語句中的場合
如建立了復合索引
create index idx_pinyin on employee(lname_pinyin,fname_pinyin);
但是索引時第一列lname沒有包含在where條件裡
如:select *from employee where fname_pinyin='xiao' --沒有包含第一列lname_pinyin
如何在django中使用mysql資料庫進行操作?
背景介紹 mysql在生產環境中是非常常用的一種關係型資料庫,效能好,開源。而python的django框架在開發環境下自帶了sqlite資料庫,雖然測試很方便,但是在部署時,最好更換成mysql資料庫。在部署django的mysql時,踩了乙個坑,而且解答也不是很完善,所以記錄一下自己的配置過程。...
如何在PHP中使用Oracle資料庫
在php3.0以上版本中,php內建了幾乎目前所有的資料庫處理函式,包括oracle 在本文中我們通過乙個例項來介紹了如何使用這些函式來操作oracle資料庫。php提供了2大類api 應用程式介面 來操作oracle資料庫。乙個是標準的oracle處理函式 ora 另乙個是oracle 8呼叫介面...
如何在資料庫動態建表
動態建表首先需要了解statement類 statement 物件用 connection 的方法createstatement 建立,例如 建立連線物件 connection connection dbutil.getconnection 建立statement物件 statement state...