小言_互联网的博客

索引与视图

372人阅读  评论(0)

什么是索引

索引:用于快速找出某个列中有一特定值的行,(是存放在模式(schema)中的一个数据库对象,依赖表存在,提高对表的索引查询速度)

索引的优点:

    1.所有的mysql列类型(字段类型)都可以被索引,即可以给任意字段设置索引

    2.大大加快数据的查询速度
索引的缺点:

    1.创建索引和维护索引要耗费时间,并且随着数量的增加耗费的时间也会增加,相应减慢增删改数据的速度

    2.索引页需要占用磁盘空间,创建过多索引,会造成存储空间大量占用。我们知道数据表中的数据也会有最大上线设置的,如果我们有大量的索引,索引文件可能会比数据文件更快达到上线值

    3.当对表中的数据进行增加,删除,修改时,索引也需要动态维护,降低了数据维护速度,增加查询优化器负担

索引的类型:

 普通索引:基本索引类型,允许索引列中的值为空,重复。

唯一索引:值必须唯一,可以为空值。如果为组合索引,则列值组合必须唯一,主键列是特殊的唯一索引,值不可以为空、不可重复。

单列索引:使用一个列作为索引列,一个表可以有多个单列索引。

组合索引:在表中使用多个字段组合创建为索引列,只有在查询条件时使用了这些组合字段的左边字段时,索引才会被使用。

创建索引
        create table 表名(
    字段 字段属性,
    index(字段)
          );

 创建唯一索引:(即在某个字段上设置索引和唯一约束)
        unique index 索引名(字段) 

创建单列索引: index 索引名(字段)

创建组合索引: index索引名(字段1,字段2...)组合索引遵循最左前缀,即只有符合最左前缀进行查询,
        才可以使用索引(最左原则:查询的字段需要是最左的字段或最左字段组合进行查询)

 最左侧前缀原则

       只要包含最左侧的字段,都会触发使用索引来查询。组合索引abc中,只有b,c,bc,cb,不会触发索引。

       在查询中,只要我们查询的语句没有问题。都会返回相应的结果。

     只是在返回结果时是否触发了索引加快了查询速度而已。可以加上explain 便可以查看是否触发索引。

新增索引: 
    alter table 表名 add index 索引名(索引字段(长度));
    show index from 表名;   查看表中已有的索引

删除索引
    alter table 表名 drop index 索引名;

      注意:是根据索引名删除,而不是根据列名删除索引,通过show index from 表名'查询索引的名字。

设计索引的原则 

       搜索的索引列,不一定是要选择的列。最适合索引的列是出现在where子句中的列,而不是出现select后中的列。

       使用唯一索引。选择容易数值容易区分的列进行索引。例如对生日的索引要比对性别的索引要好,因为生日的列具有不同的值,比较容易区分,而性别列只有M和F,此时索引用处不大,每次索引都得出大约一半的行。

       使用短索引。对字符串的前缀索引中通常会指定一个前缀长度,如果在前10到20个字符内,多数值是唯一的,那么就可以不必对整个列进行索引,而是对前10到20个字符进行索引。这样能够节省索引空间,减少I/O时间,提高查询效率。

       不要过度索引。每个额外索引都会占用额外的空间,降低写操作的性能,表修改时需要更新索引,甚至可能会重构,因此索引越多,花费的时间越长。另外MySQL在生成执行计划的时候会考虑到各个索引,多余的索引让查询优化的工作变得更加繁重。

不能简单的认为“索引越多,性能越高”,不必对每个数据列都进行索引。如果很少使用或从不使用某个索引,建议删除该索引。

什么是视图

       MySQL从5.0.1版本开始提供视图功能,它是一个表或多个表的查询结果,是一张虚拟的表,在数据库中并不实际存在,行和列数据来自于定义视图的查询中所使用的表,并且是动态生成的,它不能存储数据。

视图的优点

    1.不占内存空间

    2.简化数据操作,方便查询。不能提高查询效率,但提供数据的独立性

    3.它能根据数据变化而变化

    4.视图的建立和删除只影响视图本身,不影响表

    5.不建议使用视图增删改查

创建格式:

       create view 视图名 as 查询语句;        

视图的创建
        create view 视图名 字段列表 as 查询语句;
        (字段列表可省略,如果定义字段列表,那么查询语句所查询出的数据字段类型、顺序与定义字段列表类型、顺序一致。)

       create view view_temp as select name,age from temp;

      create view view_temp as select * from temp with check option;(with check option 视图不能被修改)

查看视图结构:
    desc 视图名;

查看视图基本信息:
    show table status like '视图名';

查看视图创建语句:
    show create view ‘视图名’;

查看视图中的数据:
    select * from 视图;

删除视图:
    drop view 视图名;

显示创建语法:
    show create view v_temp;

修改视图:
    1.create or replace view 视图名 as 查询语句;
    2.alter view 视图名 as 查询语句;

视图和表的区别

    1、视图是编译好的SQL语句,是基于SQL语句的结果集形成的可视化的虚拟表,而表不是。

    2、视图没有实际的物理存储数据,而表有。

    3、表记录实际存储的数据,视图是窗口,通过视图查看表中的数据。

视图和表的联系

        视图是基于表存在的,

索引和视图的异同

相同点:

    都可应用于数据库,索引是表的一个特性,视图是通过索引查询表而得出的结果,表建立了索引字段,查询速度也会提高。

不同点:

   1、性质不同:

  (1)索引:在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。

  (2)视图:计算机数据库中的视图,是一个虚拟表,其内容由查询定义。

   2、作用不同

  (1)索引:应于表的SQL语句执行得更快。

  (2)视图:使操作简单化,可以对经常使用的查询定义一个视图,使用户不必为同样的查询操作指定条件;增加数据的安全性,通过视图,用户只能查询和修改指定的数据;提高表的逻辑独立性,视图可以屏蔽原有表结构变化带来的影响。

如有不足,欢迎留言指正。望不吝赐教。。。


转载:https://blog.csdn.net/duan196_118/article/details/104637659
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场