索引的原理
索引的優點和缺點和使用原則
索引優點:
索引缺點:
使用原則:
什麼時候新增索引:
索引的分類
普通索引(index)
使用規則1.乙個表中可以有多個index欄位
2.欄位的值可以有重複,也可以為null值。字段值無約束
3.經常把做查詢條件的字段設定為index欄位
4.index欄位的key標誌為:mul
建立普通索引(有三種方法)
方法1:建立表時建立索引index
create
table
student(
id int
, name varchar(25
), score float(5,2
),index
(name), # 建立name索引
index
(score) # 建立score索引
);方法2:建立表後建立索引index:索引名一般和欄位名一樣,只要自己能認出就行,可以隨便起名。
mysql
>
create
index 索引名 on
表名(欄位名)
mysql
>
create
index name on
student(name);
方法3:建立表後建立索引index
mysql
>
alter
table 表名 add
index
索引名(欄位名);
mysql
>
alter
table student add
index
(name);
mysql
>
alter
table student add
index
name6(name);
檢視普通索引:key一列就是索引的列,我們會發現在name和score有值mul。
mysql
>
desc
表名;
mysql
>
desc
student; # key標誌為:mul
mysql
> show index
from
表名; # key_name值為索引名
mysql
> show index
from
student\g; # 如果欄位名過多,就新增乙個\g。
刪除普通索引:刪除普通索引只能乙個乙個刪除
mysql
>
drop
index 索引名 on
表名;mysql
>
drop
index name6 on student;
唯一索引(unique)
使用規則1.乙個表中可以有多個unique欄位
2.unique欄位的值不允許重複,可以為空值null
3.unique的key標誌是uni
建立唯一索引(基本等同index建立)
方法1:建立表時建立索引
create
table
student(
id int,
name
varchar(25
), score
float(5,2
),
unique
(name),
unique
(score)
);
方法2:建立表後建立索引:索引名一般和欄位名一樣,只要自己能認出就行,可以隨便起名。
mysql
>
create
unique
index 索引名 on
表名(欄位名);
方法3:建立表後建立索引
mysql
>
alter
table student add
unique
(name);
mysql
>
alter
table student add
unique
name6(name);
mysql
>
alter
table student add
unique
index
(name);
mysql
>
alter
table student add
unique
index
name6(name);
檢視唯一索引
mysql
>
desc
表名;
mysql
> show index
from
表名;刪除唯一索引
mysql
>
drop
index 索引名 on 表名;
主鍵索引(primary key)
外來鍵索引(foreign key)
全文索引(fulltext)
使用須知1.在mysql5.6以下,只有myisam引擎表支援全文檢索。在mysql5.6以上innodb引擎表也提供支援全文檢索。
2.在mysql5.6以下,目前只支援英文本元的全文搜尋,不支援中文全文索引,原因很簡單:與英文不同,中文的文字是連著一起寫的,中間沒有mysql能找到分詞的地方。
3.相應字段建立fulltext索引,只能在char、varchar
、text型別欄位上使用全文索引。
4.預設搜尋是不分大小寫,若要分大小寫,columne 的 character
set要從utf8改成utf8_bin。
5.match(title, content)裡的字段必須和fulltext(title, content)裡的字段一模一樣。
6.全文索引,就是在一堆文字中,通過其中的某個關鍵字等,就能找到該欄位所屬的記錄行。
建立全文索引
方法1:建立表時建立全文索引
create
table
article (
id int auto_increment not
null
primary
key,
title
varchar(200
), body
text
, fulltext(title, body)
) engine
=myisam;
方法2:建立表後建立全文索引
mysql
>
alter
table 表名稱 add fulltext index
索引名稱 (欄位名1,欄位名2)
mysql
>
alter
table article add fulltext index
(body);
mysql
>
alter
table article add fulltext index
(title, body);
方法3:建立表後建立全文索引
mysql
>
create fulltext index 索引名稱 on
表名稱(欄位名1,欄位名2)
使用全文索引
mysql
>
select
*from 表名稱 where match(欄位名) against('
條件字串1*')
mysql
>
select
*from 表名稱 where match(欄位名) against('
條件字串1'in
boolean mode)
mysql
>
select
*from article where match(title) against('
中華**
') ;
mysql
>
select
*from article where match(title,body) against('
杜月笙'
);刪除全文索引
mysql
>
drop
index 索引名稱 on
表名稱;
重建索引:在資料庫執行了較長時間後,索引都有損壞的可能
mysql
> repair table
表名稱 quick;
全文索引變數值查詢
mysql
> show variables like
'ft%
';
1、檢視表的索引
mysql> show index from table_name(表名);mysql> show index from user;
mysql> show index from user\g;
2、刪除表的索引
MySQL 索引與索引原理
本人菜鳥一枚,如有理解不對,請大神多多指正!一 索引 1 什麼是索引?答 索引類似於一本書的目錄,便於資料快速高效的查詢,也可以解釋為資料按照某個特定的規則去儲存排序資料 2 索引的型別?答 索引可以分為 普通索引,唯一索引,主鍵索引和組合索引 2.1 普通索引 最基本的一種索引方式,沒有什麼限制 ...
MySQL聚集索引詳解 mysql 索引詳解
直接起飛 1.什麼是索引?索引是幫助mysql高效獲取資料的排好序的資料結構。2.索引的資料結構?為什麼選這種結構?假設我們現在這裡有一張表 以下情況都是innodb儲存引擎 idnumber 如果mysql沒有索引這種結構,那麼我們如果查詢number為51的這行記錄,那麼mysql就要從上往下掃...
MySQL聚集索引詳解 mysql索引詳解
資料結構分,有b tree索引 b tree 雜湊索引 r tree索引等。按資料塊的順序和索引節點的邏輯順序是否一致可以分為聚集索引和非聚集索引。聚集索引由於物理塊連續,在範圍掃瞄的時候可以減少磁頭尋道時間,因而比非聚集索引高效。幾種索引型別的選擇 primary 主鍵索引。unique 唯一索引...