標籤:辛星 mysql 最佳化 索引
如果把我們的資料庫資訊當做一本書或者一個字典,那麼索引可以理解為它的目錄,如果我們建立一個優秀的目錄,那麼我們檢索資訊就會快得多,如果我們建立一個渣渣索引,也有可能拖垮整個系統。
索引我們分為四類,通常分為四大類型,即主鍵索引、全文索引、唯一索引、普通索引,這是按照索引的類型來分的。所謂主鍵索引,那就是當我們建立一張表的時候,如果我們指定了一個主鍵,那麼它就自動成為主鍵索引,比如SQL語句如下(這裡的id就自動成為了主鍵索引):
create table xin(id int unsigned primary key auto_increment,name varchar(32) not null default '');
一般來說,對於普通索引,我們可以在建立表的時候指定索引,也可以在建立表的時候指定索引,下面我們以縣建立表然後再添加索引為例,看代碼:
#建立一個資料表create table xin(id int unsigned,name varchar(32) not null default '');#在該表上建立一個索引create index xiaohei on xin(id);
這裡說一下把,這裡的添加索引的格式是:create index 索引名 on 表名(列名);
然後說一下全文索引,所謂全文索引,主要是從資料庫中搜尋字串資訊的,比如我們逛很多論壇,它的搜尋功能就特別需要全文索引了,我們的全文索引主要針對檔案、文本的索引,而且目前來說,全文索引依然只對引擎MyIASM有效,咱們指定一下表的引擎就可以了,看下面代碼:
#建立一個文章表,並且設定索引create table article(id int primary key,title varchar(200) not null ,body text,fulltext(title,body)) engine = myisam ;
那麼我們使用該全文索引的時候應該使用使用match和against,看下面操作:
#按照這種方式我們可以快速的使用全文索引來尋找內容select * from article where match(title,body) against ('xin');
但是mysql內建的這個全文索引並不支援中文,我們可以考慮使用sphinx來支援中文,這裡先不介紹。
對於unique索引,也就是唯一索引,我們直接在在列級完整性條件約束後面加一個unique即可,這裡需要注意的是被unique修飾的欄位是可以為空白的,而且是可以有多個為空白的,當然也可以像建立一個普通index那樣去建立,但是此時的index必須在前面加上一個unique修飾符。
對於索引的刪除,可以使用【alter table 表名 drop index 索引名】,但是我感覺我們使用【drop index 索引名 on 表名】更好一些。
那麼我們怎麼看一個表的索引呢,我們可以用【desc 表名】的方式來查看索引,我們還可以使用【show index from 表名】或者【show index from 表名】來查看一個表的索引。