在資料庫操作中,經常需要查詢特定的資料,以一條「select * from zyftest where id=10000」為例,資料庫必須從第一條記錄來時遍歷,直到找到id為10000的資料,這樣的效率顯然非常低。所以,mysql允許建立索引來加快資料表的查詢和排序。
一、索引的概念分析
索引的目的在於提高查詢效率,與我們查閱圖書所用的目錄是乙個道理:先定位到章,然後定位到該章下的乙個小節,然後找到頁數。相似的例子還有:查字典,查火車車次,飛機航班等。
本質都是:通過不斷地縮小想要獲取資料的範圍來篩選出最終想要的結果,同時把隨機的事件變成順序的事件,也就是說,有了這種索引機制,我們可以總是用同一種查詢方式來鎖定資料。
資料庫的索引是對資料庫表中一列或多列的值進行排序後的一種結構,其作用就是提高表中資料的查詢速度。mysql中的索引可以大致分為以下幾類:主鍵索引、唯一索引、普通索引、全文索引、組合索引、空間索引。
索引的優缺點主要體現在:
二、建立索引相關操作
建立索引的方式主要有以下三種方式
(一)建立表的時候建立索引
建立表的時候可以直接建立索引,方式簡單、方便,基本語法格式如下:
create table 表名(
屬性名 資料型別[完整性約束條件],
屬性名 資料型別[完整性約束條件],
......
屬性名 資料型別 [ unique | fulltext | spatial ] index | key
[ 別名] ( 屬性名1 [(長度)] [ asc | desc] )
);
具體解釋:
unique是可選引數,表示索引為唯一性索引;
fulltext是可選引數,表示索引為全文索引;
spatial也是可選引數,表示索引為空間索引;
index和key引數用來指定欄位為索引的,兩者選擇其中之一就可以了,作用是一樣的;
"別名"是可選引數,用來給建立的索引取的新名稱;
"屬性1"引數指定索引對應的字段的名稱,該欄位必須為前面定義好的字段;
"長度"是可選引數,其指索引的長度,必須是字串型別才可以使用;
"asc"和"desc"都是可選引數,"asc"引數表示公升序排列,"desc"引數表示降序排列。
基本舉例如下:
create table `hc_project_vote` (
`rcd_id` int (11) not null auto_increment comment 'id',
`create_time` datetime comment '建立時間',
`update_time` datetime comment '更新時間',
`sn` varchar (30) default '' comment 'sn',
`project_sn` varchar (30) default '' comment '專案sn',
`user_sn` varchar (30) default '' comment '投票者sn',
`vote_time` datetime comment '投票時間',
`visit_ip` varchar (15) default '' comment '投票者ip',
primary key (`rcd_id`),
key `idx_hc_vote_project_sn` (`project_sn`) using btree,
key `idx_hc_vote_user_sn` (`user_sn`) using btree
)engine=innodb default charset=utf8 comment '專案投票記錄表';
1.建立普通索引
create table zyf(
id int,
name varchar(20),
score float,
index(id)
);
可以使用show create table 語句檢視表的結構。
為了檢視索引是否被使用,可以使用explain 語句進行檢視: explain select * from zyf where id=1 \g; (possible_key和key的值都為id就說明id索引已經存在並且已經開始使用)
三、刪除索引相關操作
四、索引資料結構分析
五、聚集索引與輔助索引分析
六、聯合索引與覆蓋索引分析
七、正確使用索引相關分析
索引相關操作
新增聯合唯一索引 alter table t sys tranapiprepeat add unique index test biz code,biz sn 新增唯一索引 create unique index bank acct no on t reg company account bank ...
MySQL索引相關
1 什麼是最左字首原則?以下回答全部是基於mysql的innodb引擎 例如對於下面這一張表 如果我們按照 name 欄位來建立索引的話,採用b 樹的結構,大概的索引結構如下 如果我們要進行模糊查詢,查詢name 以 張 開頭的所有人的id,即 sql 語句為 select id from tabl...
mysql索引相關
explain 可以檢視sql語句的執 況,可以看到每個條件掃瞄的行數,當系統內需要使用sql查詢時,通過explain看下該語句的效能。1.索引通常被用於提高where條件的資料行匹配或者執行聯結操作時匹配其它表的資料行的搜尋速度。所以我們選擇索引的列也通常選擇出現在where子句 join子句 ...