第五章 索引

1 定义

索引是一个单独的,存储上的数据结构,他包含着对数据表里所有记录在磁盘的引用指针

2 作用

快速找出在某个或者多个列中有一特定值的行,提高查询操作的速度。

3 索引的优缺点

优点:
  1、所有的MySql列类型(字段类型)都可以被索引,也就是可以给任意字段设置索引
    2、大大加快数据的查询速度
缺点:
     1、创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加
   2、索引也需要占空间,我们知道数据表中的数据也会有最大上线设置的,如果我们有大量的索引,索引文件可能会比数据文件更快达到上线值
   3、当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度。

4 索引的实际使用

什么时候要使用索引?
主键自动建立唯一索引;
经常作为查询条件在WHERE或者ORDER BY 语句中出现的列要建立索引;
作为排序的列要建立索引;
查询中与其他表关联的字段,外键关系建立索引
高并发条件下倾向组合索引;

什么时候不要使用索引?
经常增删改的列不要建立索引;
有大量重复的列不建立索引;
表记录太少不要建立索引;
*在组合索引中不能有列的值为NULL,如果有,那么这一列对组合索引就是无效的;
*在一个SELECT语句中,索引只能使用一次,如果在WHERE中使用了,那么在ORDER BY中就不要用了;
*LIKE操作中,'%aaa%'不会使用索引,也就是索引会失效,但是‘aaa%’可以使用索引;
*在索引的列上使用表达式或者函数会使索引失效,例如:select * from users where YEAR(adddate)<2007,将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成:select * from users where adddate<’2007-01-01′。
*在查询条件中使用正则表达式时,只有在搜索模板的第一个字符不是通配符的情况下才能使用索引。
*在查询条件中使用<>会导致索引失效。
*在查询条件中使用IS NULL会导致索引失效。
*在查询条件中使用OR连接多个条件会导致索引失效,这时应该改为两次查询,然后用UNION ALL连接起来。
*尽量不要包括多列排序,如果一定要,最好为这队列构建组合索引;
*只有当数据库里已经有了足够多的测试数据时,它的性能测试结果才有实际参考价值。如果在测试数据库里只有几百条数据记录,它们往往在执行完第一条查询命令之后就被全部加载到内存里,这将使后续的查询命令都执行得非常快--不管有没有使用索引。只有当数据库里的记录超过了1000条、数据总量也超过了MySQL服务器上的内存总量时,数据库的性能测试结果才有意义。

5 索引的操作

show tables;

drop table test;


/*建表的时候创建索引  
  普通索引 适合任意数据类型 允许插入空值和重复值

*/  
create table test(
  t_id int not null auto_increment,
  t_name varchar(20) not null,
  index (t_name),
  primary key(t_id) 
);

show create table test;

-- 创建唯一索引  
create table test2(
  t_id int not null,
  unique index(t_id)
);
show create table test2;


-- 创建单列索引

create table test3(
  t_id int not null,
  t_name varchar(20) not null,
  index SingleIdx(t_name)
);
show create table test3;

-- 创建多列索引
create table test4(
  t_id int not null,
  t_name varchar(20) not null,
  t_address varchar(20) not null,
  index (t_name,t_address)
);

show create table test4;

--  创建全文索引  
/*
  1 全文索引必须在数据引擎为myisam 在才可以
  2 这里牵涉到存储引擎 
  3 了解存储引擎的特点
*/
create table test5(
  t_id int not null,
  t_name varchar(22),
  fulltext index (t_name)
)engine=myisam;

-- 空间索引  字段必须为not null 存储引擎必须是myisam
create table test6(
   t_name geometry not null,
   spatial  index (t_name)
)engine=myisam;
show create table test7;


create table test7 (
  t_id int not null,
  t_name varchar(22) not null
);


/*####在已有表中创建索引####*/
-- 1 alter table
alter table test7 add index (t_name);

--  查看表中的索引
show index from test7;

-- 2 用create index 
create unique index t_id_index on test7(t_id);

show create table test7;


/*####删除索引####*/
-- 1 alter table 来删除
alter table test7 drop index t_name;

--  2 用drop index 来删除
drop index t_name on test7;

6 存储引擎介绍

 简介

    MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能

   常见 MyISAM、InnoDB 、Memory、CSV等9种重点掌握InnoDB和MyISAM的区别

名称

InnoDB

MyISAM

事务处理

支持

不支持

数据行锁定

支持

不支持

外键约束

支持

不支持

全文索引

不支持

支持

表空间大小

较大,约2倍

较小

适用场合

  使用MyISAM:   不需事务,空间小,以查询访问为主

  使用InnoDB:     多删除、更新操作,安全性高,事务处理及并发控制

 

操作

-- 查看存储引擎
show engines;
-- 查看当前表的存储引擎
show create table test5;
-- 修改存储引擎
alter table test4 engine = myisam;

 

 

猜你喜欢

转载自blog.csdn.net/yipianfeng_ye/article/details/90636234
今日推荐