博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
撩课-Java每天5道面试题第12天
阅读量:5278 次
发布时间:2019-06-14

本文共 3246 字,大约阅读时间需要 10 分钟。

91.如何提升数据查询的效率?

1.首先检查表的结构是否合理,因为采用多表查询的时候,看主外键的引用关系是否适当.如果不适当则重新设置表结构.如果是应用中的系统,则不需要更改表的字段,只更改主外键关系.如果数据库中有较多的数据,还应采用索引提高查询效率.2.利用索引(index)对查询进行优化,index可以避免对表数据的全面扫描,当你以某个字段建立一个索引的时候,数据库就会生成一个索引页,索引页不单单保存索引的数据,还保存了索引在数据库的具体的物理地址,能够很快的定位查找到要找的记录3. 如果表的列很少,不适合建索引.表数据很少查询,而经常做insert、delete、update动作,不适合建所以。因为Oracle需要对索引额外维护。建立索引后,select会快, 当执行过多次的insert,delete,update后,会出现索引碎片,影响查询速度,我们应该对索引进行重组(即drop掉索引重新create)4.索引的类型分为:B-树索引:适合于大量的增、删、改,大多数数据的索引默认类型。位图索引:适合于决策支持系统HASH索引、分区索引等。

 

92.什么是数据库事务?

事务是作为一个逻辑单元执行的一系列操作,要么一起成功,要么一起失败。一个逻辑工作单元必须有四个属性,称为 ACID:原子性、一致性、隔离性持久性属性,只有这样才能成为一个事务。原子性 :事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。一致性 :事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。隔离性 :由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执的状态相同。持久性 :事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。

 

93.什么是数据库事务的隔离级别?

多个线程开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个线程在获取数据时的准确性。数据库共定义了四种隔离级别:Serializable:(串行化)可避免脏读、不可重复读、虚读情况的发生Repeatable read:(可重复读)可避免脏读、不可重复读情况的发生。Read committed:(读已提交)可避免脏读情况发生。Read uncommitted:(读未提交)最低级别,以上情况均无法保证。
  

94.如何删除表中的重复数据,只保留一条记录?

1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 2、删除表中多余的重复记录, 重复记录是根据单个字段(peopleId)来判断, 只留有rowid最小的记录 delete from people where peopleName in ( select peopleName from people group by peopleName having count(peopleName) > 1 ) and peopleId not in ( select min(peopleId) from people group by peopleName having count (peopleName)>1 ) 3、查找表中多余的重复记录(多个字段) select * from vitae a where (a.peopleId,a.seq) in ( select peopleId,seq from vitae group by peopleId,seq having count(*) > 1 ) 4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录 delete from vitae a where (a.peopleId,a.seq) in ( select peopleId,seq from vitae group by peopleId,seq having count(*) > 1 ) and rowid not in ( select min(rowid) from vitae  group by peopleId,seq having count(*)>1 ) 5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录 select * from vitae a where (a.peopleId,a.seq) in ( select peopleId,seq from vitae group by peopleId, seq having count(*) > 1 ) and rowid not in ( select min(rowid) from vitae  group by peopleId, seq having count(*)>1 ) 6.消除一个字段的左边的第一位: update tableName set [Title]=Right([Title],(len([Title])-1)) where Title like '村%' 7.消除一个字段的右边的第一位: update tableName set [Title]=left([Title],(len([Title])-1)) where Title like '%村' 8.假删除表中多余的重复记录(多个字段), 不包含rowid最小的记录 update vitae set ispass=-1 where peopleId in ( select peopleId from vitae group by peopleId )

  

95.如何通过sql语句完成分页?

客户端通过传递start(页码),PageSize(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的需求不一样,所以就需要我们根据实际情况去改写适合我们自己的分页语句,具体的分析如下:比如:查询第1条到第10条的数据的sql是:select * from table limit 0,10;   对应我们的需求就是查询第一页的数据:select * from table limit (1-1)*10,10;查询第10条到第20条的数据的sql是:select * from table limit 10,20;  对应我们的需求就是查询第二页的数据:select * from table limit (2-1)*10,10;查询第20条到第30条的数据的sql是:select * from table limit 20,30;  对应我们的需求就是查询第三页的数据:select * from table limit (3-1)*10,10;二:通过上面的分析,可以得出符合我们自己需求的分页sql格式是:select * from table limit (start-1)*PageSize,PageSize; 其中start是页码,PageSize是每页显示的条数。

  

转载于:https://www.cnblogs.com/gxq666/p/10018536.html

你可能感兴趣的文章
分布式计算开源框架Hadoop介绍
查看>>
安卓平台接口剖析
查看>>
坏的事情不都会带来坏的结果
查看>>
RPC的基础:调研EOS插件http_plugin
查看>>
第二次团队冲刺第二天
查看>>
bzoj 2257 (JSOI 2009) 瓶子与燃料
查看>>
11)Java abstract class 和 interface
查看>>
使用xrdp或Xmanager 远程连接 CentOS6
查看>>
Linux误删恢复
查看>>
Unity调用Windows窗口句柄,选择文件和目录
查看>>
HashMap循环遍历方式
查看>>
React Native 入门 调试项目
查看>>
C# 通过 Quartz .NET 实现 schedule job 的处理
查看>>
关于java之socket输入流输出流可否放在不同的线程里进行处理
查看>>
目前为止用过的最好的Json互转工具类ConvertJson
查看>>
Day13
查看>>
tensorflow saver简介+Demo with linear-model
查看>>
Luogu_4103 [HEOI2014]大工程
查看>>
Oracle——SQL基础
查看>>
项目置顶随笔
查看>>