彙集索引和非彙集索引html
彙集索引:一張表設置一個,默認是主鍵,能夠在建立表的時候設置爲其餘字段,能夠修改成範圍查詢的字段,好比日期。mysql
非彙集索引:能夠設置多個,組合索引查詢左邊第一個字段查詢中必須出現,好比(id, name, age),查詢的時候:id=1 and name='1'有效,name='1' and age=1 無效。sql
mysql索引類型:mysql索引
primary:惟一索引,不容許爲null。
key:普通非惟一索引。
unique:表示惟一的,不容許重複的索引,能夠爲null。
fulltext: 表示全文搜索的索引。 FULLTEXT用於搜索很長一篇文章的時候,效果最好。用在比較短的文本,若是就一兩行字的,普通的INDEX 也能夠。
spatial:空間索引。優化
索引使用原則:spa
1.選擇惟一性索引
2.爲常常須要排序、分組和聯合操做的字段創建索引
3.爲常做爲查詢條件的字段創建索引
4.限制索引的數目
5.儘可能使用數據量少的索引
6.儘可能使用前綴來索引
7.刪除再也不使用或者不多使用的索引設計
表設計優化:htm
字段儘可能非空,null字段索引很差優化,能夠設置0或者其餘標識。blog
mysql索引相關語法:排序
注意:mysql是innodb引擎有彙集索引,默認是主鍵,沒有主鍵就是第一個惟一非空索引,若是沒有主鍵也沒有合適的惟一索引,那麼innodb內部會生成一個隱藏的主鍵做爲彙集索引,這個隱藏的主鍵是一個6個字節的列,改列的值會隨着數據的插入自增。
下面是建立非彙集索引:引用http://www.javashuo.com/article/p-bovgnhqf-hg.html
1.使用ALTER TABLE語句建立索引。
語法以下:
alter table table_name add index index_name (column_list) ;
alter table table_name add unique (column_list) ;
alter table table_name add primary key (column_list) ;
其中包括普通索引、UNIQUE索引和PRIMARY KEY索引3種建立索引的格式,table_name是要增長索引的表名,column_list指出對哪些列進行索引,多列時各列之間用逗號分隔。索引名index_name可選,缺省時,MySQL將根據第一個索引列賦一個名稱。另外,ALTER TABLE容許在單個語句中更改多個表,所以能夠同時建立多個索引。
建立索引的示例以下:
mysql> use tpsc
Database changed
mysql> alter table tpsc add index shili (tpmc ) ;
Query OK, 2 rows affected (0.08 sec)
Records: 2 Duplicates: 0 Warnings: 0
(2)使用CREATE INDEX語句對錶增長索引。
可以增長普通索引和UNIQUE索引兩種。其格式以下:
create index index_name on table_name (column_list) ;
create unique index index_name on table_name (column_list) ;
說明:table_name、index_name和column_list具備與ALTER TABLE語句中相同的含義,索引名不可選。另外,不能用CREATE INDEX語句建立PRIMARY KEY索引。
(3)刪除索引。
刪除索引可使用ALTER TABLE或DROP INDEX語句來實現。DROP INDEX能夠在ALTER TABLE內部做爲一條語句處理,其格式以下:
drop index index_name on table_name ;
alter table table_name drop index index_name ;
alter table table_name drop primary key ;
其中,在前面的兩條語句中,都刪除了table_name中的索引index_name。而在最後一條語句中,只在刪除PRIMARY KEY索引中使用,由於一個表只可能有一個PRIMARY KEY索引,所以不須要指定索引名。若是沒有建立PRIMARY KEY索引,但表具備一個或多個UNIQUE索引,則MySQL將刪除第一個UNIQUE索引。
若是從表中刪除某列,則索引會受影響。對於多列組合的索引,若是刪除其中的某列,則該列也會從索引中刪除。若是刪除組成索引的全部列,則整個索引將被刪除。
刪除索引的操做,以下面的代碼:
mysql> drop index shili on tpsc ;
Query OK, 2 rows affected (0.08 sec)
Records: 2 Duplicates: 0 Warnings: 0
該語句刪除了前面建立的名稱爲「shili」的索引。