首页 数据库 mysql教程 特殊SQL语句及优化原则

特殊SQL语句及优化原则

Jun 07, 2016 pm 04:18 PM
优化 原则 语句

1.按姓氏笔画排序: Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as 2.数据库加密: select encrypt('原始密码') select pwdencrypt('原始密码') select pwdcompare('原始密码','加密后密码') = 1--相同;否则不相同 encrypt

   1.按姓氏笔画排序:

  Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as

  2.数据库加密:

  select encrypt('原始密码')

  select pwdencrypt('原始密码')

  select pwdcompare('原始密码','加密后密码') = 1--相同;否则不相同 encrypt('原始密码')

  select pwdencrypt('原始密码')

  select pwdcompare('原始密码','加密后密码') = 1--相同;否则不相同

  3.取回表中字段:

  declare @list varchar(1000),@sql nvarchar(1000)

  select @list=@list+','+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name='表A'

  set @sql='select '+right(@list,len(@list)-1)+' from 表A'

  exec (@sql)

  4.查看硬盘分区:

  EXEC master..xp_fixeddrives

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

  if (select checksum_agg(binary_checksum(*)) from A)

  =

  (select checksum_agg(binary_checksum(*)) from B)

  print '相等'

  else

  print '不相等'

  6.杀掉所有的事件探察器进程:

  DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill '+RTRIM(spid) FROMmaster.dbo.sysprocesses

  WHERE program_name IN('SQL profiler',N'SQL 事件探查器')

  EXEC sp_msforeach_worker '?'

  7.记录搜索:

  开头到N条记录

  Select Top N * From 表

  -------------------------------

  N到M条记录(要有主索引ID)

  Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID Desc

  ----------------------------------

  N到结尾记录

  Select Top N * From 表 Order by ID Desc

  8.如何修改数据库的名称:

  sp_renamedb 'old_name', 'new_name'

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

  select Name from sysobjects where xtype='u' and status>=0

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

  select name from syscolumns where id=object_id('表名')

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

  select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'

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

  select name as 存储过程名称 from sysobjects where xtype='P'

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

  select * from master..sysdatabases D where sid not in(select sid from master..syslogins where)

  或者

  select dbid, name AS DB_NAME from master..sysdatabases where sid 0x01

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

  select column_name,data_type from information_schema.columns

  where table_name = '表名'

  [n].[标题]:

  Select * From TableName Order By CustomerName

  [n].[标题]:

  Select * From TableName Order By CustomerName

  --------------------------------------------------------------------------------------

  Sql优化是一项复杂的工作,以下的一些基本原则是本人看书时所记录下来的,很明确且没什么废话:

  1. 索引的使用:

  (1).当插入的数据为数据表中的记录数量的10%以上,首先需要删除该表的索引来提高数据的插入效率,当数据插入后,再建立索引。

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

  低效:select * from dept where sal*12 >2500;

  高效:select * from dept where sal>2500/12;

  (3).避免在索引列上使用not和 “!=”,索引只能告诉什么存在于表中,而不能告诉什么不存在于表中,当数据库遇到not 和 “!=”时,就会停止使用索引而去执行全表扫描。

  (4).索引列上>=代替>

  低效:select * from emp where deptno > 3

  高效:select * from emp where deptno >=4

  两者的区别在于,前者dbms将直接跳到第一个deptno等于4的记录,而后者将首先定位到deptno等于3的记录并且向前扫描到第一个deptno大于3的。

  (5).非要对一个使用函数的列启用索引,,基于函数的索引是一个较好的方案。

  2. 游标的使用:

  当在海量的数据表中进行数据的删除、更新、插入操作时,用游标处理的效率是最慢的,但是游标又是必不可少的,所以正确使用游标十分重要:

  (1). 在数据抽取的源表中使用时间戳,这样每天的维表数据维护只针对更新日期为最新时间的数据来进行,大大减少需要维护的数据记录数。

  (2). 在insert和update维表时都加上一个条件来过滤维表中已经存在的记录,例如:

  insert into dim_customer select * from ods_customer where ods_customer.code not exists (dim_customer.code)

  ods_customer为数据源表。dim_customer为维表。

  (3). 使用显式的游标,因为隐式的游标将会执行两次操作,第一次检索记录,第二次检查too many rows这个exception,而显式游标不执行第二次操作。

  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

  只要有可能就在程序中对每个delete,insert,update操作尽量多使用commit,这样系统性能会因为commit所释放的资源而大大提高。

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

  (5). 用not exists 替代 not in

  (6). 优化group by

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

  低效:select job, avg(sal) from emp group by job having job = ‘president’ or job=’manager’;

  高效: select job, avg(sal) from emp having job=’president’ or job=’manager’ group by job;

  (7). 有条件的使用union-all 替代 union:这样做排序就不必要了,效率会提高3到5倍。

  (8). 分离表和索引

  总是将你的表和索引建立在不同的表空间内,决不要将不属于oracle内部系统的对象存放到system表空间内。同时确保数据表空间和索引表空间置于不同的硬盘控制卡控制的硬盘上。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Golang的gc优化策略探讨 Golang的gc优化策略探讨 Mar 06, 2024 pm 02:39 PM

Golang的垃圾回收(GC)一直是开发者们关注的一个热门话题。Golang作为一门快速的编程语言,其自带的垃圾回收器能够很好地管理内存,但随着程序规模的增大,有时候会出现一些性能问题。本文将探讨Golang的GC优化策略,并提供一些具体的代码示例。Golang中的垃圾回收Golang的垃圾回收器采用的是基于并发标记-清除(concurrentmark-s

Win11新电脑收到后怎么优化设置提升性能? Win11新电脑收到后怎么优化设置提升性能? Mar 03, 2024 pm 09:01 PM

我们在收到新电脑后要怎么设置优化性能,用户们可以直接的打开隐私和安全性,然后点击常规(广告ID,本地内容,应用启动,设置建议,生产力工具或者是直接的打开本地组策略编辑器来进行操作就可以了。下面就让本来为用户们来仔细的介绍一下Win11新电脑收到后如何优化设置提升性能的方法吧。Win11新电脑收到后如何优化设置提升性能的方法方法一:1、按【Win+i】组合键,打开设置,然后左侧点击【隐私和安全性】,右侧点击Windows权限下的【常规(广告ID,本地内容,应用启动,设置建议,生产力工具)】。方法二

深度解读:为何Laravel速度慢如蜗牛? 深度解读:为何Laravel速度慢如蜗牛? Mar 07, 2024 am 09:54 AM

Laravel是一款广受欢迎的PHP开发框架,但有时候被人诟病的就是其速度慢如蜗牛。究竟是什么原因导致了Laravel的速度不尽如人意呢?本文将从多个方面深度解读Laravel速度慢如蜗牛的原因,并结合具体的代码示例,帮助读者更深入地了解此问题。1.ORM查询性能问题在Laravel中,ORM(对象关系映射)是一个非常强大的功能,可以让

解码Laravel性能瓶颈:优化技巧全面揭秘! 解码Laravel性能瓶颈:优化技巧全面揭秘! Mar 06, 2024 pm 02:33 PM

解码Laravel性能瓶颈:优化技巧全面揭秘!Laravel作为一款流行的PHP框架,为开发者提供了丰富的功能和便捷的开发体验。然而,随着项目规模增大和访问量增加,我们可能会面临性能瓶颈的挑战。本文将深入探讨Laravel性能优化的技巧,帮助开发者发现并解决潜在的性能问题。一、数据库查询优化使用Eloquent延迟加载在使用Eloquent查询数据库时,避免

C++ 程序优化:时间复杂度降低技巧 C++ 程序优化:时间复杂度降低技巧 Jun 01, 2024 am 11:19 AM

时间复杂度衡量算法执行时间与输入规模的关系。降低C++程序时间复杂度的技巧包括:选择合适的容器(如vector、list)以优化数据存储和管理。利用高效算法(如快速排序)以减少计算时间。消除多重运算以减少重复计算。利用条件分支以避免不必要的计算。通过使用更快的算法(如二分搜索)来优化线性搜索。

Laravel性能瓶颈揭秘:优化方案大揭秘! Laravel性能瓶颈揭秘:优化方案大揭秘! Mar 07, 2024 pm 01:30 PM

Laravel性能瓶颈揭秘:优化方案大揭秘!随着互联网技术的发展,网站和应用程序的性能优化变得愈发重要。作为一款流行的PHP框架,Laravel在开发过程中可能会面临性能瓶颈。本文将探讨Laravel应用程序可能遇到的性能问题,并提供一些优化方案和具体的代码示例,让开发者能够更好地解决这些问题。一、数据库查询优化数据库查询是Web应用中常见的性能瓶颈之一。在

Vivox100s参数配置大揭秘:处理器性能如何优化? Vivox100s参数配置大揭秘:处理器性能如何优化? Mar 24, 2024 am 10:27 AM

Vivox100s参数配置大揭秘:处理器性能如何优化?在当今科技飞速发展的时代,智能手机已经成为我们日常生活不可或缺的一部分。作为智能手机的一个重要组成部分,处理器的性能优化直接关系到手机的使用体验。Vivox100s作为一款备受瞩目的智能手机,其参数配置备受关注,尤其是处理器性能的优化问题更是备受用户关注。处理器作为手机的“大脑”,直接影响到手机的运行速度

优化WIN7系统开机启动项的操作方法 优化WIN7系统开机启动项的操作方法 Mar 26, 2024 pm 06:20 PM

1、在桌面上按组合键(win键+R)打开运行窗口,接着输入【regedit】,回车确认。2、打开注册表编辑器后,我们依次点击展开【HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorer】,然后看目录里有没有Serialize项,如果没有我们可以单击右键Explorer,新建项,并将其命名为Serialize。3、接着点击Serialize,然后在右边窗格空白处单击鼠标右键,新建一个DWORD(32)位值,并将其命名为Star

See all articles