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值。

数据库优化和SQL操作的相关题目的更多相关文章

  1. mysql优化-数据库优化、SQL优化

    我有一张表w1000,里面有1000万条数据,这张表结构如下:CREATE TABLE `w1000` ( `id` varchar(36) NOT NULL, `name` varchar(10) ...

  2. 数据库优化系列——SQL性能优化十条建议

    1.查询的模糊匹配  尽量避免在一个复杂查询里面使用 LIKE '%parm1%'—— 红色标识位置的百分号会导致相关列的索引无法使用,最好不要用. 解决办法: 其实只需要对该脚本略做改进,查询速度便 ...

  3. 数据库优化之SQL语句优化-记录

    1. 操作符优化 (a) IN 操作符 从Oracle执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别: ORACLE试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查 ...

  4. 数据库笔记--常见sql操作

    1.数据库联表查询: 在实际项目中有时需要将两个表结合到一起进行查询,此处介绍其语法: 左连接查询:select * from tableA left join tableB on tableA.fi ...

  5. Mysql数据库优化之SQL及索引优化

    1. 如何发现有问题的SQL?  使用mysql慢查询日志对有效率问题的Sql进行监视 (1) show  variables like 'slow_query_log';     查看慢查询日志是否 ...

  6. [Sqlite] 移动嵌入式数据库Sqlite日报SQL操作语句汇总

    ,EXPLAIN分析 没有建立索引之前.分析都是表扫描: sqlite> EXPLAIN SELECT *  FROM COMPANY  WHERE Salary < 20000; add ...

  7. 常用SQL操作(MySQL或PostgreSQL)与相关数据库概念

    本文对常用数据库操作及相关基本概念进行总结:MySQL和PostgreSQL对SQL的支持有所不同,大部分SQL操作还是一样的. 选择要用的数据库(MySQL):use database_name; ...

  8. 面试问题之数据库:SQL优化的具体操作

    转载于:https://www.cnblogs.com/wangzhengyu/p/10412499.html SQL优化的具体操作: 1.尽量避免使用select *,返回无用的字段会降低查询效率. ...

  9. Oracle数据库该如何着手优化一个SQL

    这是个终极问题,因为优化本身的复杂性实在是难以总结的,很多时候优化的方法并不是用到了什么高深莫测的技术,而只是一个思想意识层面的差异,而这些都很可能连带导致性能表现上的巨大差异. 所以有时候我们应该先 ...

随机推荐

  1. SpringMVC 2.5.6 noMapping

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  2. 写给iOS程序员的命令行使用秘籍

    http://www.jianshu.com/p/44d3b8f713f2 Mac OS是Unix系统的分支,有着强大的命令行功能.很多事情在命令行下处理会事半功倍,所以我就iOS程序员可能会用到的功 ...

  3. Spring学习6-Spring整合Struts2

    一.Spring为什么要整合Struts2     Struts2与Spring进行整合的根本目的就是要让 Spring为Struts2的Action注入所需的资源对象,它们整合的原理则是只要导入了s ...

  4. 统计网站访问量,以GD2库图像形式输出

    index.php页面<?php session_start(); if($_SESSION[temp]==""){ //判断$_SESSION[temp]=="& ...

  5. xss绕过过滤之方法

    很多网站为了避免XSS的攻击,对用户的输入都采取了过滤,最常见的就是对<>转换成<以及>,经过转换以后<>虽然可在正确显示在页面上,但是已经不能构成代码语句了.这个 ...

  6. Ioc注解

    注解: 添加注解时,需要添加context的相关 <?xml version="1.0" encoding="UTF-8"?> <beans ...

  7. 微信稳居Android App排行榜4月份国内榜首

    根据某机构通过对Android样本访问行为的持续监测数据进行样本属性加权并根据iOS/Android用户调研数据建模推总得出中国移动互联网用户规模以及相应的用户结构数据显示,2015年4月份国内And ...

  8. Hadoop日记Day1---Hadoop介绍

    一.Hadoop项目简介 1. Hadoop是什么 Hadoop是一个适合大数据的分布式存储与计算平台. 作者:Doug Cutting:Lucene,Nutch. 受Google三篇论文的启发 2. ...

  9. Linux tcp_wrappers 详解

    tcp_wrappers是linux中一个安全机制[TCP_wrappers防火墙],一定程度上限制某种服务的访问权限,达到了保护系统的目的一. 要想用好tcp_wrappers,首先检查某种服务是否 ...

  10. Binary Tree Level Order Traversal

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...