1、count(*)、count(1)、count(column)的区别
- count(*)对行的数目进行计算,包含null
- count(column)对特定的列的值具有的行数进行计算,不包含null值
- count()还有一种使用方式,count(1)这个用法和count(*)的结果一样
性能问题:
1. 任何情况下SELECT COUNT(*) FROM tablename是最优选择(
2.SELECT COUNT(*) FROM tablename WHERE COL = ‘value’ 这种查询;
3.杜绝SELECT COUNT(COL) FROM tablename WHERE COL2 = ‘value’ 的出现。
如果没有主键,那么count(1)比count(*)快
如果有主键,那么count(主键,联合主键)比count(*)快
如果表只有一个字段,count(*)最快
count(1)跟 count(主键)一样,只扫描主键。count(*)跟count(非主键)一样,扫描整个表,明显前者更快一些。
2、什么是索引?索引的作用是什么?
索引的通俗解释就是索引就像是图书的目录,根据目录中的页码快速找到所需内容。
索引能大大加速数据的检索速度,加速表和表之间的连接。在使用分组和排序字句进行数据检索时,可以显著减少查询中分组和排序的时间。创建唯一性索引,保证数据库表中每一行数据的唯一性;索引可以有效提高系统性能。
3、创建索引的指导原则?
- 在经常用作过滤器的字段上建立索引
- 在SQL语句中经常进行group by、order by的字段上建立索引
- 在不同值较少的字段上不必要建立索引,如性别字段
- 对于经常存取的列避免建立索引
- 在用于连接的列(主键/外键)上建立索引
- 在经常存取的多个列上建立复合索引,但要注意复合索引的建立顺序要按照使用的频度来确定
- 缺省情况下建立的是非簇集集索引,如:含有有限数目(不是很少)唯一的列;进 行大范围的查询;充分的利用索引可以减少表扫描I/0的次数,有效的避免对整表的搜索。当然合理的索引要建立在对各 种查询的分析和预测中,也取决于DBA的所设计的数据库结构。
4、根据行号查询出第四条到第六条的员工信息
select * from(select rownum r,t.* from emp t where rownum <= 6)where r >= 4;
5、数据连接池的作用
- 维护一定数量的连接,减少创建连接的时间
- 更快的响应时间
- 统一的管理
6、数据库中join 的inner join,outer join,cross join的区别
1、以A,B两张表为例
A left join B
选出A的所有记录,B表中没有的以null代替
right join同理
2、inner join
A,B所有记录都选出,没有的记录以null代替
3、cross join(笛卡尔积)
A中的,每一条记录和B中的每一条记录生成一条记录
例如A中有4条,B中有4条,cross join就有16条记录
7、Oracle和Mysql的区别
- 库函数不同
- Oracle是用表空间来管理的,Mysql不是
- 显示当前所有的表、用户、改变连接用户、显示当前连接用户、执行外部脚本的语句的不同
- 分页查询的时候,Mysql用limit,而Oracle用rownum
8、游标的作用?如何知道游已经到了最后?
作用:
游标 用于定位结果集的行
通常判断全局变量FETCH_STATUS可以判断是否到了最后,通常此变量不等于0表示出错或到了最后。%notfound(Oracle)
9、存储过程与触发器的区别
触发器与存储过程非常相似,触发器也是SQL语句集,两者唯一的区别是触发器不能用EXECUTE语句调用,而是在用户执行Transant-SQL语句时自动触发(激活)执行。触发器是在一个修改了指定表中的数据时执行的存储过程。通常通过创建触发器来强制实现不同表中的逻辑相关数据的引用完整性和一致性。由于用户不能绕过触发器,所以可以用它来强制实施复杂的业务规则,以确保数据的完整性。触发器不同于存储过程,触发器主要是通过事件执行触发而被执行的,而存储过程可以通过存储过程名称名字而直接调用。当对某一表进行诸如UPDATE、INSERT、DELETE这些操作时,就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合这些SQL语句所定义的规则。