美文网首页
mysql索引

mysql索引

作者: name_cc2f | 来源:发表于2019-01-14 21:07 被阅读0次

一、索引简介

索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,

尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。

索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。

索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。

二、索引的分类

普通索引:加速查询,生成目录,占用空间,非where列不建议使用索引

唯一索引:unique 唯一索引,可以为空

全完索引:文章索引及其有效

单列索引:同普通索引

多列索引:单列的一种形式

空间索引:适用于空间数据

三、索引测试实验:

准备素材:

mysql> create database school;

mysql> create table school.t2(id int,name varchar(30));

Query OK, 0 rows affected (1.33 sec)

查询表结构:

mysql> desc school.t2;

+-------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id    | int(11)    | YES  |    | NULL    |      |

| name  | varchar(30) | YES  |    | NULL    |      |

+-------+-------------+------+-----+---------+-------+

2 rows in set (0.00 sec)

通过存储过程,循环输入海量数据:

mysql> delimiter $$

mysql> use school

mysql> create procedure autoinsert1()

BEGIN

declare i int default 1;

while(i<20000)do

insert into school.t2 values(i,'ccc');

set i=i+1;

end    while;

END$$

mysql> delimiter ;

mysql> call autoinsert1();

未创建索引,测试查询过程:

mysql> explain select * from school.t2 where id=20000;

+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+

| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows  | Extra      |

+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+

|  1 | SIMPLE      | t2    | ALL  | NULL          | NULL | NULL    | NULL | 44848 | Using where |

+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+

1 row in set (0.00 sec)

(explain 查询mysql使用何种查询方法,目前咩有

44848 需要查询的行数)

创建索引:create index index_id on school.t2(id);

已创建索引,测试查询过程: explain select * from school.t2 where id=20000;

(explain 查询mysql使用何种查询方法,目前是index_id默认索引方式)

创建索引后,实时查询。观察用时:

mysql> select * from school.t2 where id=20000;

+-------+------+

| id    | name |

+-------+------+

| 20000 | ccc  |

+-------+------+

1 row in set (0.00 sec)

四、创建索引:

===创建表时,同时创建索引:

语法:

CREATE TABLE 表名 (

字段名1  数据类型 [完整性约束条件…],

字段名2  数据类型 [完整性约束条件…],

[UNIQUE | FULLTEXT | SPATIAL ]  INDEX | KEY

[索引名]  (字段名[(长度)]  [ASC |DESC])

);

创建普通索引示例:

CREATE TABLE department10 (

dept_id INT,

dept_name VARCHAR(30) ,

comment VARCHAR(50),

INDEX index_dept_name (dept_name)

);

(index_dept_name 索引名称可以省略)

创建唯一索引示例:

CREATE TABLE department11 (

dept_id INT,

dept_name VARCHAR(30) ,

comment VARCHAR(50),

UNIQUE INDEX index_dept_name (dept_name)

);

创建全文索引示例:

CREATE TABLE department12 (

dept_id INT,

dept_name VARCHAR(30) ,

comment VARCHAR(50),

log text,

FULLTEXT INDEX index_log (log)

);

创建多列索引示例:

CREATE TABLE department13 (

dept_id INT,

dept_name VARCHAR(30) ,

comment VARCHAR(50),

INDEX index_dept_name_comment (dept_name, comment)

);

===CREATE在已存在的表上创建索引:

语法:CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名

ON 表名 (字段名[(长度)]  [ASC |DESC]) ;

创建普通索引示例:

CREATE INDEX index_dept_name ON department (dept_name);

(创建 索引 索引名 在 表 (列);)

创建唯一索引示例:

CREATE UNIQUE INDEX index_dept_name ON department (dept_name);

创建全文索引示例:

CREATE FULLTEXT INDEX index_dept_name ON department (dept_name);

创建多列索引示例:

CREATE INDEX index_dept_name_ comment ON department (dept_name, comment);

(创建 索引

索引名

给谁创

===ALTER TABLE在已存在的表上创建索引

语法:

ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX

索引名 (字段名[(长度)]  [ASC |DESC]) ;

创建普通索引示例:

ALTER TABLE department ADD INDEX index_dept_name (dept_name);

(修改 表 表1 新建 索引 索引名 (列);)

创建唯一索引示例:

ALTER TABLE

department

ADD UNIQUE INDEX

index_dept_name

(dept_name);

创建全文索引示例:

ALTER TABLE department ADD FULLTEXT INDEX index_dept_name (dept_name);

创建多列索引示例:

ALTER TABLE department ADD INDEX index_dept_name_comment (dept_name,comment);

五、管理索引

查看索引:SHOW CRETAE TABLE 表名\G

测试示例:

EXPLAIN SELECT * FROM department WHERE dept_name=‘hr’;

(请关注查询记录的数量)

删除索引:

show create table employee6;

  DROP INDEX 索引名 ON 表名;

相关文章

  • MySQL索引及查询优化书目录

    MySQL索引的原理之索引目的 MySQL索引的原理之索引原理 MySQL索引的原理之索引的类型 MySQL索引的...

  • 高性能的索引策略

    MySQL查询基础-查询执行过程 MySQL聚簇索引 MySQL覆盖索引 MySQL索引扫描排序 MySQL冗余和...

  • MySQL索引的使用

    MySQL索引 MySQL索引可以快速提高MySQL的检索速度。索引分单列索引和组合索引单列索引:即一个索引只包含...

  • Mysql索引与锁

    本文以Mysql5.7为例测试。 1:mysql索引方法 Mysql的索引方法分为btree索引和hash索引。 ...

  • 索引(二)

    mysql索引的新手入门详解mysql索引之三:索引使用注意规则 索引(Index)是帮助 MySQL 高效获取数...

  • MySQL 索引分类

    MySQL索引的分类(根据数据结构) 索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL...

  • MySQL--索引

    MySQL索引 查看索引 创建索引 创建唯一索引 创建主键索引 删除索引 删除主键 MySQL视图 创建视图 删除...

  • mysql索引

    索引 mysql索引的建立对于mysql的高效运行是很重要的,索引可以大大提高mysql的检索速度。索引分单列索引...

  • 5.2MySQL创建高性能索引考察点

    MySQL索引的基础和类型延伸:MySQL索引的创建原则延伸:MySQL索引的注意事项 索引的基础索引类似于书籍的...

  • MySql 数据查询优化

    1. MySQL索引类型: mysql的索引有5种:主键索引、普通索引、唯一索引、全文索引、聚合索引(多列索引)。...

网友评论

      本文标题:mysql索引

      本文链接:https://www.haomeiwen.com/subject/fvtsdqtx.html