显示标签为“Database”的博文。显示所有博文
显示标签为“Database”的博文。显示所有博文

2009年4月28日星期二

SQL Server隔离级别

下面四种隔离级别允许不同类型的行为。

隔离级别脏读不可重复读取幻像
未提交读
提交读
可重复读
可串行读

2009年4月22日星期三

Oracle 隔离级别

 

Dirty Read 

NonRepeatable Read 

Phantom Read 

Read uncommitted

Possible

Possible

Possible

Read committed

Not possible

Possible

Possible

Repeatable read

Not possible

Not possible

Possible

Serializable

Not possible

Not possible

Not possible


2009年2月17日星期二

各种数据库的分页查询

DB2
SELECT * FROM (Select 字段1,字段2,字段3, rownumber() over (ORDER BY 排序用的列名 ASC) AS rn from 表名) AS a1 WHERE a1.rn BETWEEN 10 AND 20

Oracle
SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40) WHERE RN >= 21

SQL Server
select top @pagesize * from table1 where id not in (select top @pagesize*(@page-1) id from table1 order by id) order by id

MySQL
select * from table LIMIT 5,10

2009年2月9日星期一

Informix之初体验

看了一评论说Informix10是不能再糟糕的产品,昨天装了Informix11,发现这款产品也很让人抓狂啊。装的时候被胡乱装了一堆东西,装完后开始菜单一堆东西,而且装的时候有些组件的默认路径竟然是temp,太弱智了啊,以下是我的一点总结:

1. 装完后会创建一个server,名字类似ol_ids_1150_1,也就相当于一个instance,然后这个server会作为一个服务,到windows/system32/drivers/etc/services里去找他的对应得端口,这个server的名称在JDBC URL里会用到

2. 没有图形界面的管理工具,有个叫做dbaccess的文本管理界面,极土无比让人发指,但是也有一些第三方的web管理工具

3. Jdbc驱动还要安装一下才能用,到安装文件目录里去找安装文件吧,URL的形式为jdbc:informix-sqli://localhost:9088/mydb:INFORMIXSERVER=ol_ids_1150_1
驱动名:com.informix.jdbc.ifxDriver

4. Infocenter: http://publib.boulder.ibm.com/infocenter/idshelp/v111/index.jsp

2009年2月3日星期二

DB2之SQL优化

这个题目太大,先开个头, 后面再补充

1. 用索引(废话), 建了索引还要经常RUNSTATS

2. exists比in快

3. 少用select *, 不但慢还不好维护

4.

2008年12月15日星期一

DB2隔离级别和锁一点总结

四种级别由高到低要牢记:RR, RS, CS(Default), UR
任何级别的写得时候都需要加X锁,这样保证没有Lost updates
UR读不加锁,所以有Dirty Read
CS读只对当前游码加S锁,所以有可能有Nonrepeatable Read
RS读对读取到得到的结果级都加锁,只会有Phantom
RR读也对读取到得到的结果级都加锁,连Phantom都没有(why?)

参考: http://blog.chinaunix.net/u1/33594/showart_327266.html

2008年12月13日星期六

Create Table中不熟悉的用法: LIKE, GENERATED

LIKE: 按已有表结构生成另一种表
CREATE TABLE MYBOOKS LIKE BOOKS

GENERATED: 字段是自动生成的,最普通的情况是自增
CREATE TABLE BOOKS ( BOOKID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
FICTIONBOOKS INTEGER,
NONFICTIONBOOKS INTEGER,
TOTALBOOKS INTEGER
GENERATED ALWAYS AS (FICTIONBOOKS + NONFICTIONBOOKS)
)

2008年12月5日星期五

SQL之data-change-table-reference

这也是偶还没用过的SQL,还是用例子说话:

SELECT salary FROM OLD TABLE (UPDATE employee SET salary = salary * 1.07 WHERE empno = '000220'); 这条语句取出update之前的数据

SELECT * FROM FINAL TABLE (INSERT INTO customers (cust_name) VALUES ('Lamarr')); 这条取插入后的数据
注意,这个方法非常有用,可以取出自增的字段

SQL之MERGE

之前一直没用过这个语句,学习一下:
MERGE INTO employee AS e #要merge到这个表里
USING (SELECTempno, firstnme, midinit, lastname, workdept, phoneno,hiredate, job, edlevel, sex, birthdate, salaryFROM my_emp) AS m #merge的内容,也可以是表和视图
ON e.empno = m.empno #merge的条件
WHEN MATCHED THEN UPDATE SET (salary) = (m.salary) #有冲突就更新,可以删除
WHEN NOT MATCHED THEN INSERT (empno, firstnme, midinit, lastname, workdept, phoneno,hiredate, job, edlevel, sex, birthdate, salary)VALUES (m.empno, m.firstnme, m.midinit, m.lastname,m.workdept, m.phoneno, m.hiredate,m.sex, m.birthdate, m.salary) #没冲突就插入

详细的说明在这:http://publib.boulder.ibm.com/infocenter/db2luw/v9/topic/com.ibm.db2.udb.admin.doc/doc/r0010873.htm?resultof=%22%4d%45%52%47%45%22%20%22%6d%65%72%67%22%20

2008年12月3日星期三

Solid State Drive (SSD)

1.SSD其实就是企业级U盘,可以取代传统硬盘
2.SSD的存取速度大大超过传统硬盘,直逼内存的速度
3.如果用SSD来实现DB的存储,数据访问速度可提高1000倍,最后的响应速度可以提高10倍
4.SSD虽然在局部极大提升速度,但是终端用户感觉不明显,它主要的作用是能大大的提高系统的并发处理能力和吞吐量,也就是提高一台服务器可支持的客户量。
5.SSD的可擦写次数是有限的,所以最好用于读操作的应用,如BI
6.某些公司,如baidu已经开始使用SSD提升局部的性能了,用SSD来保存索引是个好主意
7.SSD的发展可能改变传统的软件开发模式,很多用cache的地方都可以不用了,因为硬盘和内存已经快一样快了,也许有一天DB2就和Solid DB一样快了

2008年12月2日星期二

Reorg & Truncate

Reorg: 整理page或者index碎片,当使用alter命令改变表结构时,会产生碎片,表停留在Reorg Pending状态,读写操作都会被阻止
两个存储过程来查询Reorg的状态
REORGCHK_TB_STATS
REORGCHK_IX_STATS


Truncate: 清空表而不写日志,当表数据量大时必须使用。可惜DB2没有Truncate指令,汗,有两种方式达到同样的效果
1.alter table tablename ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE;
2.import 一个空文件