tempad
ReadyGo!技术成就梦想 >>数据库 >> Sybase ASE 12.5数据库实用特性的个人总结

Sybase ASE 12.5数据库实用特性的个人总结

ReadyGo!技术成就梦想 网络搜索 efish 2008-8-17 17:04:12

【-IT技术报道】Sybase ASE 12.5数据库实用特性的个人总结:

一:SQL Bisic

◆1:SQL(Structured Quary Language)特性:

a:标准化

b:非过程化的

c:可优化的

d:面向集合操作的

◆2:ASE中的数据类型

a:Numberic

b:Character

c:Date/Time

d:Lobs

◆3: convert(varchar, textColumn),如果不指定varchar(n)n那么默认是30

◆4:where 在sql中的作用

a:过滤数据

b:做表连接(sql92以前)

c:选择索引

◆5:whare 和 having的区别

where语句把过滤好的数据插入到work table中

having语句从work table中对数据进行在过滤以得到最后的结果。

◆6:一个select语句的执行顺序

a:from clause

b:where clause

c:group by clause

d:select clause

e:having clause

f:order by clause

◆7:Union VS Union All

a:Union 会把两个结果集排序,并且除去重复的元素(效率差,轻易不要用)

b:Union All仅仅是把两个结果集合并,没有排序,也不去除重复元素(效率好)

二:索引和查询参数

◆1:ASE中有三种access数据方式

a:clustered Index

b:nonclustered Index

c:table scan

◆2:Covered Query

一个Covered Query 仅仅从索引中得到数据,不用去扫描数据库表,这是最快的数据查询方式。

限制1:只能在selece中生效

限制2:所有被引用的列必须在同一个nonclustered index中

◆3:functional index

在ASE15.0以后才被支持,也就是说在ASE15.0以前的版本,下列语句是可定不会用上索引的

sql 代码

select column1

from table1

where upper(column2) = "IVANL"

◆4:如何查看执行计划

sql 代码

set showplan on

go

your sql

go

set showplan off

go

◆5: 如何查看IO

sql 代码

set statistics io on

set statistics time on

go

you sql

go

set statistics io off

set statistics time off

go

◆6:使用Index的建议

a:使用那些经常在where语句中使用的字段做index

b:使index中包含的字段越少越好

c:drop掉没用的index

三:表连接

◆1:什么是表连接

表连接是从多表中查询数据,或者是从一个表中多次取数据。

(A join is a Transanct-SQL operation than access rows from multi-tables or from a single talbe multi-times)

◆2:表连接的类别

a:inner join

b:outer join

c:cross join(full join)

◆3:ASE中不支持full join但是通过union可以模拟full join

sql 代码

select t1.colu1, t2.column2

from t1, t2

where t1.id *= t2.id

union

select t1.colu1, t2.column2

from t1, t2

where t1.id =* t2.id

(不建议使用,效率很差)

◆4:ASE中最多支持50个table做表连接,ASE的查询优化器做的不是很好,Sybase推荐join表不超过4个

◆5:数据库中有三种方式来实现表连接

a:nested loop join

b:merge join

c:hash join

(可以使用show plan来查看数据库选用哪种join来实现join语句)

◆6:对表连接的建议:

a:用showplan 看使用了那种用join方式

b:在join的列上加Index

c:把多表的join才分成几个小表的join

d:避免产生笛卡儿积

四:使用Case语句

◆1:case语句的两种形式

sql 代码

a:

case

when search_condition then expression

end

b:

case expression

when expression then expression

end

◆2:case的用途

a:decoding column

sql 代码

select cust_id, cust_name

case cust_type

when "R" then "Relation"

when "I" then "International"

when "s" then "Small"

else "Other"

end as customer_type

b:conditionally displaying columns or values

sql 代码

select title_id, total_sales,

case

when total_sales > 5000 then "hight"

when total_sales < 100 then "low"

else " "

end as "column"

c:horizontal frequency table and summary calculation

sql 代码

select sum(case type when "adv" then 1 else 0 end ) as adv

, sum( case type when "cus" then 1 else 0 end) as cus

from customer

d:updating on variable conditions

sql 代码

update customer

set cust_charge = cust_charte + case cust_type

when "d" then 1

when "c" then 2

when "e" then 3

else 0

end

e:rules and check constraints

create table cust_order_info

(

order_num int,

order_taker int,

order_date char(7) default

case

when datepart(dw, getDate()) between 2 and 6 then "weekday"

else "weekend"

end

)

五:事务和锁

◆1:ASE中有两种事务模式

a: Chained Mode

b:unChained Mode(Sybase默认)

unchained mode显示的开始一个事务,chained隐式的开始一个事务

unchained mode 使用"commint tran", "rollback tran"

chained mode 使用"commint work ", "rollback work"

unchained mode 支持嵌套事务,chained mode不支持

◆2:Locking schema

a: All pages table, will lock data and index as they are accessed(可以有clustered index)

b: A Datapages table will lock datpages as they are accessed, index will not be locked(无clustered index)

c: A DataRow table will lock datpages as they are accessed, index will not be locked(无clustered index)

◆3:Locking type

ASE中最重要的三种lock type是

a:shared locks(select , fetch)

b:update locks(fetch ,update, delete)

c:exclusive locks(insert , update, delete)

◆4:隔离级别

ASE中一共有四种隔离级别

a:isolation level 0 (read uncommited),允许胀读

b:isolation level 1 (read comminted)(ASE DEFAULT), 不允许胀读

c:isolation level 2 (repeatable read),可重复读

d:isolation level 3 (serializable), 不允许幻影读

sql 代码

set transaction isolation level {0|1|2|3}

or

select ...

at isolation {0|1|2|3}

◇5:如何编写高效的transaction

For OLTP transaction

a:使transaction尽可能的短

b:使用index来随机访问数据

c:只有在必要的时候才使用transaction

d:选取合适的Lock type和隔离级别

e:使用乐观锁

六:数据处理

◆1:除以0

使用coalesce()和nullif()

先使用nullif()把0转换成null,在用coalesce()处理null的情况

sql 代码

select coalesce(total_sales/nullif(sales,0),0)

-- coalesce(ex1, ex2,ex3...)返回第一个不是Null的表达式

-- nullif(expre, value)如果expre=value,则返回null

◆2:找到重复的数据

sql 代码

select type, count(*)

from table

where ..

group by type

having count(*) > 1

◆3:找出重复次数最多的数据

sql 代码

select type, count(*)

from table

where ..

group by type

having count(*) = max(count(*))

◆4:数据累加

java 代码

select t1.title_id, t1.advice, sum(t2.advice) as cumulative_total

from title t1, title t2

where t1.title_id >= t2.title_id

group by t1.title_id, t1.advice

◆5:ranking data

sql 代码

select rank = identity(10), title_id, total_sales

into #top from titles

where ..

order by total_sales desc

go

select * from #top

go

drop table #top

go

◆6:conver between julian Date and gregorian date

sql 代码

select datepart(yy, @date)*1000+datepart(dy, @date) as julina_date

select dateadd(dd, juliandate%1000, "12/31/"+convert(char(4),juliandate/1000 -1)) as gregorian_date

◆7:计算本月有多少天

sql 代码

datepart(dd,

dateadd(dd,-1 --last day of this month

datead(mm,1 --add a month

dateadd(dd --

,

1-datepart(dd,getdate() --1-today

getDate())))) --get today

◆8:是否是闰年

sql 代码

select datepart(dy, "03/01/"||convert(char(4),datepart(yy,getdate())))

--= 61 是闰年

--= 60 不是闰年

(责任编辑:卢兆林)

责任编辑: efish 参与评论 查找更多:
相关文章
图文讲解安装Sybase 11.9.2的具体步骤 图文讲解安装Sybase 11.9.2的具体步骤
轻松掌握MySQL数据库锁机制的相关原理 (1) 轻松掌握MySQL数据库锁机制的相关原理 (1)
五种MySQL数据库可靠性方案的分析和比较 (1) 五种MySQL数据库可靠性方案的分析和比较 (1)
MySQL数据库中对前端和后台进行系统优化 (1) MySQL数据库中对前端和后台进行系统优化 (1)
巧用MySQL InnoDB引擎锁机制解决死锁问题 (1) 巧用MySQL InnoDB引擎锁机制解决死锁问题 (1)
一种特别简单的MySQL数据库安装方法 一种特别简单的MySQL数据库安装方法
实例讲解如何配置MySQL数据库主从复制 (1) 实例讲解如何配置MySQL数据库主从复制 (1)
MySQL存储过程SAVEPOINT ROLLBACK to MySQL存储过程SAVEPOINT ROLLBACK to
创建Bitmap_Join_Indexes中的约束与索引 创建Bitmap_Join_Indexes中的约束与索引
在MySQL数据库中应当如何关闭错误提示音 在MySQL数据库中应当如何关闭错误提示音
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的ReadyGo.com.cn

分类导航
ReadyGo!技术成就梦想