索引能够大幅提高 MySQL 的查询性能,最简单有效。
CREATE INDEX,查询效率有可能提升数百上千倍
结论:索引是用于提高海量数据查询效率的重要手段,有时不能不用!
MySQL 存储数据在磁盘中,磁盘的基础单位为“扇区”,512B~4KB 不等。因磁盘速度慢,所以减少 IO 次数是性能优化重点。
故,用Page作为IO单位,是为了提高 IO 效率,不是所有访问都被读输。
一次IO不读1条,而是1个Page,遮盖N条记录,尽可能减少IO次数
在数据库中,索引是提高查询性能的重要工具。以下是几种常见的索引类型的介绍:
方法一:
----创建表时,直接再字段名后面添加primary key
create table user1(id int primary key,name varchar(20));方法二:
----在创建表后添加一列或者多列为主键索引
create table user 2(id int ,name varchar, primary key(id));方案三:
---创建表时没有指定主键索引
create table user2 (id int ,name varchar(20));
---创建后添加主键索引
alter table user2 add primary key(id);NULL。
去除主键索引:
alter table user1 drop primary key;NULL 值。
方法一:
create table d1(id int ,name varchar(20) unique);方法二:
create table d1 (id int ,name varchar(20) ,unique(id));方法三:
create table d1(id int ,name varchar(20));
alter table d1 add unique(id);NULL 值(具体取决于数据库的实现)。
删除索引:
方法一:
alter table 表名 drop index couln_name;方法二:
drop index 字段名 on 表名;注:复合唯一键明确其中主导地位的是哪个键,删除主导键就意味着删除复合键
此时占据主导的就是id键

方案一:
create table d3(id int ,name varchar(20),index (name));方案二:
create table d3(id int ,name varchar(20));
alter table d3 add index(name);方案三:
create table d4 (id int ,name varchar(20));
create index key_name on d4(id);方案三是对索引重新起名字,这是与方案一二的不同之处 。
SELECT)有显著性能提升,尤其是在大量数据的情况下。
WHERE 查询时,数据库会使用索引来加速检索。
删除索引:
方案一:
drop index key_name on d4;如果你对索引重新起名字,这是的key_name就是你重新起的名字。
方案二:
alter table d4 drop index key_name;InnoDB(MySQL ≥5.6)或 MyISAM(旧版本)。
CHAR、VARCHAR 或 TEXT 类型。
ngram 分词插件(默认仅支持英文空格分词)
测试:
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 ...');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 ...'); 这是两个比较重要的地方大家要注意一下
使用主键索引:
MATCH / AGAINST 查询操作,用于全文搜索,特别适合用于搜索引擎的实现。
NULL。
NULL。
方法一:
SHOW KEYS FROM 表名;方法二:
SHOW INDEX FROM 表名;方法三:(这种方法得到的情况比较简略)
DESC 表名;