数据库中的视图索引

一、视图

1、什么是视图:

视图是从一个或多个表中导出来的表,是一种不是一种真正存在的概念。

视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据。

这样,用户可以不用看到整个数据库中的数据,而之关心对自己有用的数据。

数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中。

使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。

视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变。

2、视图操作sql:

创建视图:

create  view viewName(参数列表/可以不写这样就是默认和下面的select一样)

as select * from   表名;

例1:

(1)、create  table viewdemo(id int primary key , name char(10),score  float);

(2)、create  view  view1

as select* from  viewdemo;

(3)、create view view2(name,score)

as select name ,score from  viewdemo;

修改视图:

alter  view  viewname (columns)  as  select columns from   tableName ;

例:

alter view  view2 (id ,name)  as select  id,name from  viewdemo ;

删除视图:

drop  view if exists  view  name;

列:

drop   view  view2;

二、索引

1、什么是索引

索引,可以理解为是一本书的目录,它记录了数据在数据库中存放的位置,就像一本书的目录,记录了,某一页在这本书的那个位置。相同地,索引是一个单独的、存储在磁盘上的数据库结构,它们包含着对数据库表里所有记录的引用指针。

MySQL中索引的存储类型有两种:BTREE(树)和 HASH(哈希),具体和表的存储引擎有关。MyISAM和InnoDB存储引擎只支持BTREE索引。

2、索引的好处

适当使用索引能提升数据库查询速度!

3、实例:

在创建表的时候创建索引

CREATE   TABLE  表名  [  列名称  数据类型 ]

[  UNIQUE  |  FULLTEXT  ]   [  INDEX   |   KEY    ]    [  索引名称  ]   ( 列名称  [  length  ]  )  [  ASC | DESC ]

说明:  UNIQUE  、 FULLTEXT  为可选参数,分别表示唯一索引、全文索引;INDEX 与 KEY为同义词,两者的作用相同,用来指定索引;

(1)、普通索引(index): 普通索引是MySQL的基本索引类型,允许在定义索引的列中插入重复值和空值

例:

CREATE  TABLE book

(

bookid   INT  NOT  NULL,

bookname VARCHAR(100)  NOT  NULL,

authors  VARCHAR(100)  NOT  NULL,

info  VARCHAR(500) NULL,

year_publication   YEAR  NOT  NULL,

INDEX(year_publication)

);

(2)、唯一索引(unique):唯一索引列的值必须唯一,但允许有空值。主键索引是一种特殊的唯一索引,不允许有空值。

例:

CREATE TABLE  book

(

id  INT  NOT  NULL,

name  CHAR(50)  NOT  NULL,

UNIQUE  INDEX   UniqueIdx(id)

);

(3)、联合索引:组合索引即是在多个列上创建索引。查询时,只有在查询条件中使用了这些字段(创建组合索引的时候指定的哪些列)的最左边字段时,索引才会被使用。

CREATE TABLE student

(

id  INT  NOT  NULL,

name  CHAR(50)  NOT  NULL,

age  INT  NOT  NULL,

info  VARCHAR(200),

INDEX   MultiIdx(id,name,age)

);

(4)、全文索引:mysql只有MyISAM存储引擎支持FULLTEXT索引,并且类类型为CHAR、TEXT、VARCHAR。 并且需要指定表的存储引擎为MyISAM。

例:

CREATE TABLE t4

(

id  INT  NOT  NULL,

name  CHAR(50)  NOT  NULL,

age  INT  NOT  NULL,

info  VARCHAR(200),

FULLTEXT INDEX   FullindexName(info)

) ENGINE = MyISAM ;

在已经存在的表上创建索引:

语法:

ALTER  TABLE  table_name  ADD   [  UNIQUE  |  FULLTEXT  ]   [  INDEX   |   KEY    ]

[  inex_name  ]  (col_name [ length ] ,...)  [ASC | DESC ]

(1)、普通索引:ALTER  TABLE  book  ADD  INDEX        indexName( bookname(30) );

(2)、唯一索引:ALTER  TABLE  book  ADD UNIQUE INDEX  UniqueIdx( bookid );

(3)、组合索引:ALTER  TABLE  book  ADD  INDEX  BkAndInfoIdx( authors(20), info(50) );

(4)、全文索引:ALTER TABLE t6  ADD  FULLTEXT  INDEX infiIdx(info);(前提是这个表的存储引擎为 MyISAM)

使用 create  index  创建索引:

 语法:

CREATE    [  UNIQUE  |  FULLTEXT  ]   [  INDEX   |   KEY    ]  INDEX  index_name

ON   table_name ( col_name[ length ] , ... )  [ASC | DESC ]

例:在表book的bookname字段上建立名为BkNameIdx的索引。

CREATE INDEX  BkNameIdx   ON   book (bookname);

例: 在book表的bookId字段上建立唯一索引。

CREATE   UNIQUE    INDEX  UniqueIdx    ON   book (bookId);

4、删除索引:

(1)、ALTER   TABLE  table_name   DROP   INDEX  index_name;

(2)、DROP    INDEX     index_name   ON  table_name ;

5、总结:

这样我们的视图和索引就建立了,是不是建立了视图我们可以使用show table
来查看,是不是已经建立了索引以及是不是有效我们也可以使用explain select * from student where
name=‘sss‘;来查看这样就会出现一张表其中就有select_type 看这里的查询类型我们就可以知道是不是建立的索引起效。

当我们建立了表、视图、索引之后如果你想删除表则要考略这样一个问题,即和这个表有关的所有对象都删除还是只

删除这个表;

cascade(级联)  restrict(限制)以上的事由这两个来完成。

delete  table student  cascade;   删除所有和student表相关的对象(视图、索引、触发器、、、)。

delete table student  restrict ; 只是删除了student表。

解释: 聚簇索引就是逻辑顺序和物理顺序保持一致,所以只能建立一个聚簇索引,但可以建立多个唯一索引等。

索引: rdbms 中索引一般采用b+树、hash索引来实现,b+树索引具有动态平和的有点,而hash索引具有快读查找的特点。索引是关系数据库的内部实现技术,属于内模式的范畴。

注意点: 在insert 中一般大家都会省去要插入的属性列的列出但是这样有一个影藏的危险,就是当你插入的数据一个相互兼容或者是相同类型的时候,你只要输入就可以。这样不好,我们要在插入的时候吧每个列列出来这样的话就安全多了。

时间: 2024-11-05 20:37:54

数据库中的视图索引的相关文章

Java学习总结(十八)——MySQL数据库(4)MySQL数据库中的视图,函数,存储过程中常见循环

一.MySQL存储过程中常见的循环1.while循环:WHILE.....DO.....END WHILE例1:创建存储过程(求1+2+.......+num的和):创建成功,进行调用:显示结果:2.REPEAT循环: REPEAT.........UNTLL END REPEAT例2:创建存储过程:创建完成,调用存储过程:显示结果:3.LOOP循环:LOOP END LOOP 例3:创建存储过程:创建成功,调用存储过程:显示结果:二.MySQL中的视图1.概念:有结构(有行有列),但没有结果(

Postgres数据库中的视图和物化视图

摘自:http://www.cnblogs.com/yjf512/p/4402096.html postgres中的视图在查询的时候进行扫描子表的操作,而物化视图则是实实在在地将数据存成一张表.物化视图是在9.3 之后才有的东西. 创建一个视图 CREATE OR REPLACE VIEW student_view ASSELECT * FROM student LEFT JOIN teacher ON student.teacher_id = teacher.id; 创建一个物化视图 CREA

数据库中创建视图

视图   :有联系的表之间,建立虚拟的表! 步骤  :打开数据库中  ‘选用的数据库’,右击‘视图’,选择‘新建视图’.然后填加   ‘选用的数据库’中有关联的  ‘表’,选择视图中 要显示的 ‘列’,然后关闭,保存新视图就创建完成! --drop view       xueshengfenshu   --删除视图 --alter view     xkf                 --修改视图就是删除重写! 只有在前面使用top数字后,才可以使用 order by .视图中不能使用聚合

数据库中的视图、序列及索引

一.视图 语法:create view 视图名称 as 子查询 例:创建一视图,包含全部的20部门的雇员信息(雇员编号,姓名,工作,雇佣日期) create view emp20 as select empno,ename,job,hiredate from emp wheredeptno = 20; 删除视图:drop view 视图名称 替换视图:create or replact 视图名称 as 子查询 更换视图时不需要先执行删除操作,系统会为用户自动删除及重建 create or rep

数据库中的聚集索引、非聚集索引、优化索引

这篇文章我们来讨论一下索引的问题吧,这篇文章不会介绍怎么创建索引,但是会介绍怎么优化索引. 什么是索引? 索引是对记录按照多个字段进行排序的一种方式.对表中的某个字段建立索引会创建另一种数据结构,其中保存着字段的值,每个值又指向与它相关的记录.这种索引的数据结构是经过排序的,因而可以对其执行二分查找. 怎么理解索引呢?我们经常用在windows系统下,查询某些文件,系统都会建议我们建立文件的索引.比如,如果你要查询一个文件名,系统要扫描所有文件进行傻瓜式地扫描,速度当然会很慢.当我们建立了索引后

比较两个数据库中的视图/存储过程的结构(结构比较,不是功能比较)

CREATE PROC P_COMPDB @DB1 SYSNAME, --第一个库 @DB2 SYSNAME --第二个库 AS EXEC(' SELECT 类型=CASE ISNULL(A.XTYPE,B.XTYPE) WHEN ''V'' THEN ''视图'' ELSE ''存储过程'' END ,匹配情况=CASE WHEN A.NAME IS NULL THEN ''库 ['[email protected]+'] 中无'' WHEN B.NAME IS NULL THEN ''库 [

找到 mysql 数据库中的不良索引

为了演示,首先建两个包含不良索引的表,并弄点数据. mysql> show create table test1\G *************************** 1. row ***************************        Table: test1 Create Table: CREATE TABLE `test1` (   `id` int(11) NOT NULL,   `f1` int(11) DEFAULT NULL,   `f2` int(11) DE

SQLServer中在视图上使用索引(转载)

在SQL Server中,视图是一个保存的T-SQL查询.视图定义由SQL Server保存,以便它能够用作一个虚拟表来简化查询,并给基表增加另一层安全.但是,它并不占用数据库的任何空间.实际上,在你查询它之前,视图并不做任何事情. 索引视图 在SQL Server 2000和2005中,你能够给视图增加索引.但是,如果视图只是一个保存在数据库中的查询定义,在运行前没有自己的数据,你如何给那个定义建立一个索引呢?嗯,这比较麻烦. 索引视图是一个已被物化或保存在数据库中的视图.当基本表更新时,给视

oracle数据库表约束、视图、索引—该记录为本人以前微博的文章

一.Oracle 数据库常用操作续关于创建表时创建约束1.创建表的时候增加约束----约束是定义表中的数据应该遵循的规则或者满足的条件----约束是建立在列上的,让某一列或者某几列数据之间有约束----约束可以在创建的表的同时创建约束,也可以在创建表之后再创建约束----约束分为表级约束和列级约束,定义的方式不同,但是效果是相同的----列级约束:列名  数据类型 [default 默认值] [列级约束1  列级约束2--]----表级约束:constraint 约束名称 约束类型(列名)---