diff --git "a/20\345\220\264\346\263\263\346\263\260/\347\254\224\350\256\260/2022.9.14--\347\264\242\345\274\225.md" "b/20\345\220\264\346\263\263\346\263\260/\347\254\224\350\256\260/2022.9.14--\347\264\242\345\274\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..71f97ed40120be35ae5f49622a58a2fc1e1a546d --- /dev/null +++ "b/20\345\220\264\346\263\263\346\263\260/\347\254\224\350\256\260/2022.9.14--\347\264\242\345\274\225.md" @@ -0,0 +1,66 @@ +#### 索引分类 + +**索引主要分为两类**: + +- **聚集索引(clustered)**:根据数据行的键值在表或视图中的排序存储这些数据行,每个表只有一个聚集索引。聚集索引是一种对磁盘上实际数据重新组织以按指定的一列或多列值排序(类似字典中的拼音索引)(物理存储顺序)。 + + ![img](https://gitee.com/snailclass/tuchuang/raw/master/img/%E5%9B%BE%E7%89%872-2022-9-1316:27:08.png) + +- **非聚集索引 (nonclusterted)**:具有独立于数据行的结构,包含非聚集索引键值,且每个键值项都有指向包含该键值的数据行的指针。(类似字典中的偏旁部首索引)(逻辑存储顺序)。 + + ![img](https://gitee.com/snailclass/tuchuang/raw/master/img/%E5%9B%BE%E7%89%872-2022-9-1316:27:08.png) + +**其它类型的索引**: + +- 按照数据唯一性分类:唯一索引、非唯一索引 +- 按键列个数区分:单列索引,多列索引 + +- 其他分类:索引视图、包含性列索引、全文索引、XML索引等 + +#### 索引的创建与使用 + +- 索引的创建 + +```sql +--01创建索引基本语法 +CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] +INDEX ON ( [ASC|DESC][,...n]) + +--练习:为DBSTUDENT创建score字段索引 + +--练习:查找姓名为MikeSullivan、年龄17岁用户的peopleid +--分别使用单列索引和多列索引 +``` + +- 索引的使用 + +```sql +--使用索引进行查询 +``` + +- 索引的删除 + +```sql +--删除索引 +``` + + + +TIPS: + +- 索引信息存储在系统视图sys.indexes中 +- 可以使用系统存储过程:exec sp_helpindex查看当前表的索引 +- 填充因子:一页需要填充多少数据。 + + + +#### 使用索引的注意事项 + +- 使用聚集索引的查询效率要比非聚集索引的效率要高,但是如果需要频繁去改变聚集索引的值,写入性能并不高,因为需要移动对应数据的物理位置。 +- 非聚集索引在查询的时候可以的话就避免二次查询,这样性能会大幅提升。 +- 不是所有的表都适合建立索引,只有数据量大表才适合建立索引,且建立在选择性高的列上面性能会更好 +- 在where后使用or,导致索引失效(尽量少用or) +- 使用like ,like查询是以%开头,以%结尾不会失效 +- 不符合最左原则(多列索引) +- 如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引 +- 使用in导致索引失效 \ No newline at end of file diff --git "a/20\345\220\264\346\263\263\346\263\260/\347\254\224\350\256\260/2022.9.15--\350\247\206\345\233\276.md" "b/20\345\220\264\346\263\263\346\263\260/\347\254\224\350\256\260/2022.9.15--\350\247\206\345\233\276.md" new file mode 100644 index 0000000000000000000000000000000000000000..25b37214bf4f66f74d9e73361502e6f2bb6e099d --- /dev/null +++ "b/20\345\220\264\346\263\263\346\263\260/\347\254\224\350\256\260/2022.9.15--\350\247\206\345\233\276.md" @@ -0,0 +1,47 @@ +## 视图 + +#### 关系(Relations) + +三种类型关系: + +- 表(Table)--基表,存储关系(Base Tables,Sorted relations) +- 视图(Views)--虚拟关系(Virtual relations)(不是物理存在的是虚拟的) +- 临时结果(Temporary results)--用于构建**子查询**的结果 + + + +#### 什么是视图 + +- 视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上 +- 视图中并不存放数据,而是存放在视图所引用的原始表(基表)中,即基本中的数据发生变化,从视图中查询的数据也随之改变。 +- 同一张原始表,根据不同用户的不同需求,可以创建不同的视图 + +**视图的作用** + +- 视图能够简化用户的操作 +- 视图使用户能以多种角度看待同一数据 +- 视图对重构数据库提供了一定的逻辑独立性 +- 视图能够对机密数据提供安全保护 + +#### 基于视图的操作 + +##### 定义视图 + +```sql +--建立视图 +create view <视图名> [(<列名>[,<列名>]...)] + as <子查询> [with check option] +``` + +with check option:视图更新 + +--视图可以更新,不建议,一般直接对基表操作 +--update V_StuMajor set 姓名='王博文' where 学号=16130201 + +--insert V_StuMajor values(16101011,'蜗牛','信息学院','统计') + +--删除视图 +drop view V_StuMajor +--该语句从数据字典中删除指定的视图定义 +--由该视图导出的其他视图仍在数据字典中,但不能使用,需要删除 +--删除基表时,由该基表导出的所有视图定义都必须显示删除 \ No newline at end of file