数据库索引和SQL语句

本文介绍了数据库中索引和视图的相关知识。索引可对表中列值排序,能加快数据检索等,但也有耗费时间、占空间等弊端,还说明了适合和不适合建索引的列。视图是从基本表导出的虚表,文中还给出了修改表、数据查询等相关 SQL 语句示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

索引

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。
在表Student上按Sno降序建唯一索引

create unique index Stusno on Student (Sno desc);

删除Student表的Stusno索引

alter table Student drop index Stusno;

那么数据库中的索引作用是什么?什么情况下适合建索引什么情况下不适合?
1.通过创建唯一性索引,可以保证表中每一行数据的唯一性
2.可以加快数据的检索速度
3.可以加速表与表之间的链接,在实现数据完整性方面有意义。
4.在使用分组(group by)和排序(Order by)子句进行检索时,同样可以显著减少查询中分组和排序的时间。
当然索引也有不利的方面
1.耗费时间,随着数据量的增加而增加。
2.占据物理空间。
3.对表中数据进行增删改的时候,索引也要动态的维护,降低了数据的维护速度。

哪些列上适合创建索引呢?
1.经常需要搜索的列
2.经常用在连接的列上,这些列主要是一些外键,可以加快连接速度。
3.在经常需要根据范围进行搜索的列上,因为索引已经排序,其指定的范围是连续的。
4.在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询的速度。
5.在经常使用where子句的列上,加快条件的判断速度

哪些地方不适合建索引呢?
1.那些在查询中很少使用的列
2.那些数据量很少的列
3.当修改操作远远大于检索操作时

视图

视图是从一个或几个基本表中导出的表,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,数据仍然放在基本表里。视图就像一个窗口。

下面举例一些SQL语句
修改基本表

alter table <表名>
[ add <新列名> <数据类型> [完整性约束] ]
[ drop <完整性约束名> ]
[ modify column <列名> <数据类型>]

向Student表添加入学时间列

alter table Student add S_entrance DATE;

数据查询

select [ all | distinct } <目标列表达式>  from  <表名> 
[ where < 条件表达式 > ]
[ group by <列名> [ having <条件表达式> ] ]
[ order by <列名> [ asc | desc ] ]

查询Student表中具有相同年龄的每个组的人数

select Sage ,count(*) from Student group by Sage;

如果分组后还要按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则使用having。例如对上例筛选

select Sage ,count(*) from Student group by Sage having count(*) > 1;

若查询涉及多个表,使用连接查询。
若有表Student、SC(选课表),要求查询每个学生及其选修课程的情况:

select Student.* , SC.* from Student,SC where Student.Sno=SC.Sno;

这种称自然连接或内连接。若有学生没有选课,则在SC表里没有相应的元组,造成最终结果舍掉这些学生的信息。

如果想把没有选课的学生也保留在结果中,可以使用外连接。
下面用左外连接(左外连接列出左边表(本例为Student表)中的所有元组)

select Student.*,SC.* from Student left join SC on (Student.Sno=SC.Sno);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值