特殊sql语句及优化原则

特殊sql语句及优化原则,第1张

特殊sql语句及优化原则,第2张

1.按姓氏笔画排序:

select * From TableName Order By CustomerName Collate Chinese _ PRC _ Stroke _ ci _ as

2.数据库加密:

选择加密(“原始密码”)

选择pwdencrypt(“原始密码”)

Select pwdcompare('原始密码','加密密码')= 1-相同;否则,不同的加密(“原始密码”)

选择pwdencrypt(“原始密码”)

Select pwdcompare('原始密码','加密密码')= 1-相同;否则就不一样了。

3.检索表中的字段:

声明@list varchar(1000),@sql nvarchar(1000)

Select @ list = @ list+','+b.name from sysobjects a,sys columns b where a . id = b . id and a . name = ' table a '

Set @ SQL =' select'+right (@ list,len (@ list)-1)+'from table a '

exec (@sql)

4.检查硬盘分区:

执行主机..xp _固定驱动程序

5.比较表A和表B是否相等:

if(从A中选择checksum_agg(binary_checksum(*))

=

(从B中选择checksum_agg(binary_checksum(*))

打印“相等”

其他

打印“不相等”

6.终止所有事件浏览器进程:

从master.dbo.sysprocesses为SELECT 'kill '+RTRIM(spid)声明hcforeach游标全局

Where _ name in ('SQL事件探查器',n' SQL事件探查器')

' EXEC sp_msforeach_worker '?'

7.记录搜索:

从n条记录开始

从表中选择n *

-

n到M条记录(带有主索引ID)

Select Top M-N * From table Where ID in(Select Top M ID From table)Order by ID desc

-

n到记录的末尾

select Top N * From table Order by ID desc
8。如何修改数据库的名称:

sp_renamedb '旧名称','新名称'

9:获取当前数据库中的所有用户表

从系统对象中选择名称,其中xtype='u '且状态> =0

10:获取某个表的所有字段。

从syscolumns中选择,其中id = object _ id('表名')

11:查看与某个表相关的视图、存储过程和函数。

Select a. * from sysobjects a,syscomments b where a. id = b.id和b.textlike'% table name% '

12:查看当前数据库中的所有存储过程

从sysobjects中选择name作为存储过程名,其中xtype='P '

13:查询用户创建的所有数据库。

select * from master..sid不在的sysdatabases D(从master中选择sid..syslogins,其中name='sa ')

或者

select dbid,name AS DB_NAME from master..sid 0x01所在的sysdatabases

14:查询某个表的字段和数据类型。

从information_schema.columns选择column_name,data_type

其中表名= '表名'

[n]。[标题]:

select * From TableName Order By CustomerName

[n]。[标题]:

select * From TableName Order By CustomerName

-

Sql优化是一项复杂的工作。以下基本原理是我自己看书时记录下来的。他们很清楚,没有废话:
1。索引的使用:

(1)当插入的数据超过数据表中记录的10%时,需要先删除表的索引以提高数据插入效率,插入数据后再建立索引。

(2).避免对索引列使用函数或计算。在where子句中,如果索引是函数的一部分,优化器将不再使用索引,而是使用全表扫描。比如:

效率低:select * from部门sal * 12 > 2500

高效:select * from sal > 2500/12的部门;

(3).避免使用not和"!=”,索引只能告诉表中存在什么,不能告诉不存在什么。当数据库遇到not和"!= ",索引将停止,并执行全表扫描。

(4) > =代替>

效率低下:在deptno > 3的情况下从emp中选择*

高效:从部门编号> =4的emp中选择*

两者的区别在于,前者dbms会直接跳转到deptno等于4的第一条记录,而后者会先定位deptno等于3的记录,再向前扫描到deptno大于3的第一条记录。

(5).有必要为使用函数的列启用索引。基于函数的索引是一个更好的方案。

2.光标的使用:

在海量数据表中删除、更新、插入数据时,用游标处理效率最慢,但游标必不可少,所以正确使用游标非常重要:

(1)在数据抽取的源表中使用时间戳,使得维度表数据的日常维护只针对更新日期最近的数据,大大减少了需要维护的数据记录数量。

(2).添加一个条件,在插入和更新维度表时过滤维度表中的现有记录,例如:

插入到dim _ customer select * from ODS _ customer,其中ods_customer.code不存在(dim_customer.code)

Ods_customer是数据源表。Dim_customer是一个维度表。

(3).使用显式游标,因为隐式游标会执行两个操作,第一次是检索记录,第二次是检查行太多的异常,而显式游标不会执行第二个操作。

3.数据提取和上传期间的sql优化:

(1).where子句中的连接顺序:

Oracle以自下而上的顺序解析where子句。根据这个原则,表与表之间的连接必须写在其他where条件之前,那些可以筛选出大量记录的条件必须写在where子句的末尾。比如:

低效率:select * from EMP e where sal > 5000 and job = ' manager ' and 25高效率:select * from EMP e where 255000 and job = ' manager ';

(2).删除整个表时,用truncate替换delete。同时注意truncate只能在删除整个表时应用,因为truncate是ddl而不是dml。

(3)尽可能使用commit。

只要有可能,对程序中的每一个删除、插入、更新更新操作都使用commit,这样系统性能会因为commit释放的资源而大大提高。

(4).用exists代替in可以提高查询效率。

(5).将不在替换为不存在

(6)优化分组方式

为了提高group by语句的效率,可以在group by之前过滤掉不必要的记录。比如:

低效率:从EMP组中选择job,avg(sal)by job = ' president '或job = ' manager

高效:选择职务,avg (sal)从empliving job =' president '或job = ' manager ' group by job

(7).有条件地使用union-all而不是union:这将使排序变得不必要,并将效率提高3到5倍。

(8).单独的表和索引

始终在不同的tables 空中构建您的表和索引,绝不在system table 空中存储不属于oracle内部系统的对象。同时确保数据表空和索引表空放在硬盘控制卡控制的不同硬盘上。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 特殊sql语句及优化原则

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情