信息产业培训网
[当前位置]:首页--技术专区--数据库--SybaseRSS订阅按钮

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

http://www.miiceic.org.cn   2008-8-12 9:17:42   中程在线   浏览数:
关键字:Sybase ASE 12.5 实用特性 总结

  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

  [when search_condition then expression]

  [else exproestion]

  end

  b:

  case expression

  when expression then expression

  [when exproession then expression]

  [else 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

  [/code]

  e:rules and check constraints

  [code]

  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 不是闰年

来源:CCID
相关连接
最新评论
*以下网友发言不代表中程在线网站的观点和看法
    我要评论

    请您注意
    1、遵守中华人民共和国的各项有关法律规定
    2、承担一切因您的行为而导致的法律责任
    3、本网留言管理人员有权删除其管辖留言内容
    4、您在本网的留言本网有权在网站内转载和引用
    5、参与本留言即表明您已经阅读并接受上述条款
    我爱研发网中电华信阿里西西JAVA爱好者北京英才网全球大学查询网
    中国人的网站导航中国电脑论坛信息产业部新浪科技搜狐IT信息产业部电子教育与考试中心
    IT世界网软件项目交易网中国软件交易网国信培训网亚远景科技....[更多]
    关于我们 | 网站地图 | 周边住宿 | 行车路线 | 联系我们 | 网站律师 | 意见反馈 | 虚位以待 | 友情链接
    中程在线(北京)科技有限公司 版权所有
    总 部:北京市海淀区青东商务楼A座西四层
    企业培训部:010-52636110 52636106 就业培训部:010-68716925 68716926
    邮 件:training@miiceic.org.cn
    京ICP备06053134号
    Copyright © 2005-2008 Miiceic.org.cn All Rights Reserved