招聘需求系列之六


终于到了最后的两个大头,一个是设计模式,一个是SQL,数据库博主用过SQLITE,SQL SERVER ,MYSQL和ORACLE。

真正用的多的是ORACLE,包括其强大的事务,存储过程等等。这几个数据库的区别还是挺大的,很多用法都不一样,笔试面试和工作中最大的问题就是性能调优和联合查询了,

性能主要就是考虑到1SQL语句的写法2索引,视图等的使用3ORACLE本身的性能4数据量是否过大

举例说当查找时用索引很快,大批量删除时用ROWID很快,当数据量太大时就需要分表,分表有两种垂直和水平,垂直就是表结构拆分,水平就是只拆数据,

把数据分类存到不同表,这个公司出现过单表接近2E的数据,还有就是SQL的优化,之前也有遇到查询很慢,查了N个表最后还要GROUP BY的,最后被一个同事一个表一个表数据的查出来解决的。

博主的SQL并不好,但是工作中也用到了很多,正好借此机会再好好梳理下,一切就以ORACLE说了。


憋两天实在不想说什么,熟能生巧的东西跟业务逻辑比没什么可比性,研究太专业了就是DBA的事了,平时写的过程中主要是跟IBATIS结合,业务量大主要就是设计的表多,左右关联多表查询这类东西用的多,优化看情况,一般有了索引都不会太慢,从右向左执行之类。

ORACLE用的印象比较深的就是存储过程,因为做过批量删数据,涉及到5个表其中2个表数据了特别大,用ID删的,还用了临时表。几次优化和排错,隐式游标等。

至于分页用的MYBATIS的原理就是跳过多少个记录选择规定页的记录。ORALCE的SQL分页有个坑就是ROWNUM一定要先查出来起个别名,不然ROUWNUM会一直从1开始排当你从中间开始查询的时候就啥也娶不到了,他就这么设计你有什么办法。

常见SQL优化:

1对小表索引不会改善性能

2在变化较大且很多NULL的列建索引很有效

3物极必反查询25%的数据内时会极大加快反而所以会增加开销

4索引会使修改速度变慢

5索引占用空间

6两表关联字段适合建索引

7最好不要在同一物理介质存储索引和表,分开存储能避免争用驱动器。

8避免使用or,in比or快

9优化SQL是可先用分析工具看花费的时间和主要耗费在哪个部分

10执行SQL是从右往左分析,所以报错的时候会从后面开始报

11把<>的sql改写,因为用<>不会用索引

12删表truncate比delete快

  1.INSERT INTO SELECT语句

      语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1

      要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。


      2.SELECT INTO FROM语句

      语句形式为:SELECT vale1, value2 into Table2 from Table1

      要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中

SQL查询处理的步骤序号:

  (1)  FROM <left_table>  

  (3) <join_type> JOIN <right_table> 

  (2) ON <join_condition> 

  (4) WHERE <where_condition> 

  (5) GROUP BY <group_by_list> 

  (6) WITH {CUBE | ROLLUP} 

  (7) HAVING <having_condition> 

  (8) SELECT 

  (9) DISTINCT    

  (9) ORDER BY <order_by_list>

  (10) <TOP_specification> <select_list>




VIEW:create view XXX as select

INDEX:create index XXX on table(column)

临时表

CURSOR:declare XXX cursor for select

procedure:create or replace procedure XXX(参数) as/is

begin

end

TRIGGER:触发器不能建在临时表,不能建在视图,删除表后触发器跟着删除。create trigger XXX on table for 增删改可同时存在 as  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值