建筑學網(wǎng)站推薦seo搜索引擎優(yōu)化排名哪家更專業(yè)
個人主頁:Lei寶啊?
愿所有美好如期而遇
目錄
索引操作
查詢索引
創(chuàng)建主鍵索引
唯一索引的創(chuàng)建
普通索引的創(chuàng)建
全文索引的創(chuàng)建
刪除索引
索引創(chuàng)建原則
索引操作
查詢索引
第一種方法: show keys from 表名\G
?我們了解其中幾個就好。
第二種方法:show index from 表名\G
第三種方法(信息比較簡略): desc 表名;
創(chuàng)建主鍵索引
第一種方式:
-- 在創(chuàng)建表的時候,直接在字段名后指定 primary key
create table user1(id int primary key, name varchar(30));
第二種方式:
-- 在創(chuàng)建表的最后,指定某列或某幾列為主鍵索引
create table user2(id int, name varchar(30), primary key(id));
指定多列為主鍵索引
我們先插入幾個數(shù)據(jù)進行測試:
這里我們可以用explain工具看一下,是否使用到索引
第三種方式:?
create table user3(id int, name varchar(30));
-- 創(chuàng)建表以后再添加主鍵
alter table user3 add primary key(id);
主鍵索引的特點:
- 一個表中,最多有一個主鍵索引,當然可以使符合主鍵
- 主鍵索引的效率高(主鍵不可重復)
- 創(chuàng)建主鍵索引的列,它的值不能為null,且不能重復
- 主鍵索引的列基本上是int
唯一索引的創(chuàng)建
第一種方式
-- 在表定義時,在某列后直接指定unique唯一屬性。
create table user4(id int primary key, name varchar(30) unique);
第二種方式:
-- 創(chuàng)建表時,在表的后面指定某列或某幾列為unique
create table user5(id int primary key, name varchar(30), unique(name));
第三種方式
create table user6(id int primary key, name varchar(30);
alter table user6 add unique(name);
唯一索引的特點:
- 一個表中,可以有多個唯一索引
- 查詢效率高
- 如果在某一列建立唯一索引,必須保證這列不能有重復數(shù)據(jù)
- 如果一個唯一索引上指定not null,等價于主鍵索引
普通索引的創(chuàng)建
第一種方式
create table user8(id int primary key,
name varchar(20),
email varchar(30),
index(name) --在表的定義最后,指定某列為索引
);
?
第二種方式
create table user9(id int primary key, name varchar(20), email varchar(30));
alter table user9 add index(name); --創(chuàng)建完表以后指定某列為普通索引?
第三種方式
create table user10(id int primary key, name varchar(20), email varchar(30));
-- 創(chuàng)建一個索引名為 idx_name 的索引
create index idx_name on user10(name);
普通索引的特點:
- 一個表中可以有多個普通索引,普通索引在實際開發(fā)中用的比較多
- 如果某列需要創(chuàng)建索引,但是該列有重復的值,那么我們就應該使用普通索引
全文索引的創(chuàng)建
當對文章字段或有大量文字的字段進行檢索時,會使用到全文索引。MySQL提供全文索引機制,但是有要求,要求表的存儲引擎必須是MyISAM,而且默認的全文索引支持英文,不支持中文。如果對中文進行全文檢索,可以使用sphinx的中文版(coreseek)
全文索引:
fulltext(表名)
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title,body)
)engine=MyISAM;
INSERT INTO articles (title,body) VALUES
('MySQL Tutorial','DBMS stands for DataBase ...'),
('How To Use MySQL Well','After you went through a ...'),
('Optimizing MySQL','In this tutorial we will show ...'),
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
('MySQL vs. YourSQL','In the following database comparison ...'),
('MySQL Security','When configured properly, MySQL ...');
?
key那一欄為NULL,說明我們查找時沒有用到全文索引
如何在查找時使用全文索引呢?
報錯那段,索引寫全,對于索引名為title,是因為創(chuàng)建全文索引時他寫在前面。
刪除索引
第一種方法-刪除主鍵索引: alter table 表名 drop primary key;
?我們先看看表user10已有的索引
刪除主鍵索引
第二種方法-其他索引的刪除: alter table 表名 drop index 索引名;
索引名就是show keys from 表名中的 Key_name 字段??
?
?第三種方法方法: drop index 索引名 on 表名
?
?
索引創(chuàng)建原則
- 比較頻繁作為查詢條件的字段應該創(chuàng)建索引
- 唯一性太差的字段不適合單獨創(chuàng)建索引,即使頻繁作為查詢條件
- 更新非常頻繁的字段不適合作創(chuàng)建索引(這樣會反復重新構(gòu)建索引,效率低下)
- 不會出現(xiàn)在where子句中的字段不該創(chuàng)建索引