当前位置: 首页 > news >正文

数据库优化和SQL操作的相关题目

SQL操作

1.有一个数据库表peope,表有字段name,age,address三个属性(注:没有主键)。现在如果表中有重复的数据,请删去重复只留下其中的一条。重复的定义就是两条记录的name,age,address值都一样。
关键是怎么把重复的数据过滤掉,后来我考虑的做法是这样的:

1
2
3
4
5
6
7
select  from  people  group  by  name ,age,address  having  COUNT ( DISTINCT  name )=1
 
这样就可以把重复的数据过滤掉,然后把这些数据插入到一个临时表中,删去原表中的所有数据,再把临时表中的数据插回来就可以了。
 
CREATE  TEMPORARY  TABLE  tmp_table  select  from  people  group  by  name ,age,address  having  COUNT ( DISTINCT  name )=1
delete  from  people
insert  into  people  select  from  tmp_table

  

2.有如下的部门员工表:

1.查询每个月倒数第 2 天入职的员工的信息.

2.查询出last_name为 ‘Chen’ 的 manager 的信息.

3.查询平均工资高于 8000 的部门 id 和它的平均工资.

4. 查询工资最低的员工信息: last_name, salary

5. 查询平均工资最低的部门信息

6. 查询平均工资最低的部门信息和该部门的平均工资

7. 查询平均工资最高的 job 信息

8. 查询平均工资高于公司平均工资的部门有哪些?

9. 查询出公司中所有 manager 的详细信息.

10. 各个部门中最高工资中最低的那个部门的最低工资是多少

11. 查询平均工资最高的部门的 manager 的详细信息: last_name, department_id, email, salary

12. 查询 1999 年来公司的人所有员工的最高工资的那个员工的信息.

13.返回其它部门中比job_id为‘IT_PROG’部门所有工资都低的员工的员工号、姓名、job_id以及salary

 

3.sql查询Oracle数据库最后10条记录并按降序排列。
SELECT TOP 10 FROM 表名 ORDER BY 排序列 DESC;

SQL的执行顺序先按照你的要求排序,然后才返回查询的内容。

例如有一个名为ID自动增长的列,表中有100条数据,列的值得分别是1、2、3、4………9、99、100。那么查询加了DESC你得到的是91到100条,就是最后十条,如果加ASC你得到的将会是1到10,也就是最前面的那几条记录,

如果说有先后的话 必然是根据某几个字段进行排序了的你反过来排序就变成求前10条记录了呗,把desc和 asc互换一下 (默认是 asc )oracle 的写法select * from (select * from tab order by col desc ) where rownum <= 10

最后10条降序与最前10条升序是一样的如果还想排序,那就按他们说的用临时表。

1
2
3
select  top  10 *  from  table  order  by  field1  into  table  #tempselect *  from  # temp  order  by  field1  desc  //查询结果放临时表
select  top  10  from  table1  order  by  field1  asc  into  tabl  temp  //再从临时表查询
select  from  temp  order  by  field1  desc

  

数据库优化

1.假设有一亿个用户,每个用户至少关注100个人,如何设计数据库(关系型数据库)满足下面几个需求
1,查找a关注了哪些人
2,查找a被哪些人关注了
3,查找a和b共同关注了哪些人

2.数据库commit操作是否应该在一个大事务中实现,也就是一个大事务只有一个commit?
使用一个大事务来实现批量数据库操作,虽然回退和重提非常方便,但是不利于批量数据操作出现异常时的处理和时间要求。如果批量数据处理在最后一步运行缓慢或失败,那么事务回退时间将非常长,重新运行需要从头开始跑整个事务,可能无法满足有限的批量数据操作时间窗口要求
Oracle数据库的情况下,大事务操作需要设置足够大的undo表空间,insert操作要大于数据大小的一倍;update,delete操作要大于数据大小的两倍。另外还需要兼顾其他操作的消耗。
如果分批操作会影响业务完整性,则没必要分批进行,而且也不建议去故意分批进行操作,只需要保证有足够大的undo表空间。

3.数据库中记录较多,有20万条左右,需要反复查询记录匹配数据,如何做能提高算法效率,节省查询时间?
1,优化查询语句,避免全表扫描
2,引入缓存策略,尽量避免访问数据库
3,合理建立索引
4,避免SQL语句中不合理的连接和嵌套等

4.SQL语句优化的策略都有哪些?
创建表的时候。应尽量建立主键,根据主键查询数据;
●大数据表删除,用truncate table代替delete。
●合理使用索引,在OLTP应用中一张表的索引不要太多。组合索引的列顺序尽量与查询条件列顺序保持一致;对于数据操作频繁的表,索引需要定期重建,以减少失效的索引和碎片。
●查询尽量用确定的列名,少用*号。

尽量少嵌套子查询,这种查询会消耗大量的CPU资源;对于有比较多
or运算的查询,建议分成多个查询,用union all联结起来;多表查询
的查询语句中,选择最有效率的表名顺序(基于规则的优化器中有效)。Oracle解析器对表解析从右到左,所以记录少的表放在右边。

尽量多用commit语句提交事务,可以及时释放资源、解
锁、释放日志空间、减少管理花费;在频繁的、性能要求比较高的
数据操作中,尽量避免远程访问,如数据库链等,访问频繁的表可
以常驻内存:alter table...cache;
利用索引,避免大表FULL TABLE SCAN;
合理使用临时表;
避免写过于复杂的sql,不一定非要一个sql解决问题;
在不影响业务的前提下减小事务的粒度;

5.大量数据并发的情况下 ,不用自增列 怎样设置主键?
1:定义一张表,专门用来存放存所有需要唯一ID的表名称以及该表当前所使用到的ID值。
2: 写一个存储过程,专门用来在上一步的表中取ID值。


相关文章:

  • TNF诱导的关节破坏由IL-1介导
  • Boost中的一些实用技术
  • uWSGI参考资料(1.0版本的配置选项列表)
  • 数据产品设计专题(2)-数据产品设计方法论
  • 某些书籍翻译的太屎了,误导人!
  • js
  • 服务模拟-ServiceMock
  • 超链接点击一次就失效不能再点击
  • #Java异常处理
  • 1.请求安全-- 一个简单的 单设备登录 单点登录
  • CST UTC
  • 在CentOS上安装与配置Tomcat
  • Modular Multiplicative Inverse(模乘逆元)
  • 线程同步辅助类——CountDownLatch
  • Java中的并发工具
  • Bootstrap JS插件Alert源码分析
  • JavaScript服务器推送技术之 WebSocket
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • mysql 5.6 原生Online DDL解析
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Python3爬取英雄联盟英雄皮肤大图
  • tab.js分享及浏览器兼容性问题汇总
  • 仿天猫超市收藏抛物线动画工具库
  • ------- 计算机网络基础
  • 解决iview多表头动态更改列元素发生的错误
  • 聊聊directory traversal attack
  • 前端攻城师
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 十年未变!安全,谁之责?(下)
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 主流的CSS水平和垂直居中技术大全
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ​用户画像从0到100的构建思路
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #QT项目实战(天气预报)
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (十六)Flask之蓝图
  • (未解决)macOS matplotlib 中文是方框
  • (五)关系数据库标准语言SQL
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转)IOS中获取各种文件的目录路径的方法
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET中的Exception处理(C#)
  • /etc/sudoer文件配置简析
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • []FET-430SIM508 研究日志 11.3.31
  • [Android Pro] android 混淆文件project.properties和proguard-project.txt
  • [C#7] 1.Tuples(元组)