分类

链接

2024 年 11 月
 123
45678910
11121314151617
18192021222324
252627282930  

近期文章

热门标签

新人福利,免费薅羊毛

SQL优化经验总结8

因为内部发生的类型转换, 这个索引将不会被用到! 为了避免ORACLE对你的SQL进行隐式的类型转换, 最好把类型转换用显式表现出来. 注意当字符和数值比较时, ORACLE会优先转换数值类型到字符类型 (31) 需要当心的WHERE子句:   某些SELECT 语句中的WHERE子句不使用索引. 这里有一些例子.   在下面的例子里, (1)‘!=' 将不使用索引. 记住, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中. (2) ‘||'是字符连接函数. 就象其他函数那样, 停用了索引. (3) ‘+'是数学函数. 就象其他数学函数那样, 停用...

SQL Server 暂无评论 阅读(1,883)

SQL优化经验总结7

ORDER BY中所有的列必须包含在相同的索引中并保持在索引中的排列顺序. ORDER BY中所有的列必须定义为非空.   WHERE子句使用的索引和ORDER BY子句中所使用的索引不能并列.   例如:   表DEPT包含以下列:     DEPT_CODE PK NOT NULL DEPT_DESC NOT NULL DEPT_TYPE NULL   低效: (索引不被使用)     SELECT DEPT_CODE FROM DEPT ORDER BY DEPT_TYPE   高效: (使用索引)     SELECT DEPT_CODE FROM DEPT WHERE DEPT_TYPE > 0   (...

SQL Server 暂无评论 阅读(1,845)

SQL优化经验总结6

低效: (索引失效)   SELECT … FROM DEPARTMENT WHERE DEPT_CODE IS NOT NULL;   高效: (索引有效)     SELECT … FROM DEPARTMENT WHERE DEPT_CODE >=0;   (27) 总是使用索引的第一个列:   如果索引是建立在多个列上, 只有在它的第一个列(leading column)被where子句引用时,优化器才会选择使用该索引. 这也是一条简单而重要的规则,当仅引用索引的第二个列时,优化器使用了全表扫描而忽略了索引   28) 用UNION-ALL 替换UNION ( 如果有可能的话):   当SQ...

SQL Server 暂无评论 阅读(1,908)

SQL优化经验总结5

高效:   SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION WHERE LOC_ID = 10 UNION SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION WHERE REGION = “MELBOURNE” 低效:   SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION WHERE LOC_ID = 10 OR REGION = “MELBOURNE” 如果你坚持要用OR, 那就需要返回记录最少的索引列写在最前面. (25) 用IN来替换OR 这是一条简单易记的规则,但是实际的执行效果还须检验,在ORACLE8i下,两者的执行路径似乎是相同的. 低效:   SELECT…. FROM...

SQL Server 暂无评论 阅读(2,118)

SQL优化经验总结4

19) sql语句用大写的;因为oracle总是先解析sql语句,把小写的字母转换成大写的再执行 (20) 在java代码中尽量少用连接符“+”连接字符串!   (21) 避免在索引列上使用NOT 通常,   我们要避免在索引列上使用NOT, NOT会产生在和在索引列上使用函数相同的影响. 当ORACLE”遇到”NOT,他就会停止使用索引转而执行全表扫描.   (22) 避免在索引列上使用计算.   WHERE子句中,如果索引列是函数的一部分.优化器将不使用索引而使用全表扫描.   举例:   低效:     SELECT … FROM DEP...

SQL Server 暂无评论 阅读(1,880)

SQL优化经验总结3

例子: (高效)SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND EXISTS (SELECT ‘X' FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = ‘MELB')   (低效)SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND DEPTNO IN(SELECT DEPTNO FROM DEPT WHERE LOC = ‘MELB')   (16) 识别'低效执行'的SQL语句:   虽然目前各种关于SQL优化的图形化工具层出不穷,但是写出自己的SQL工具来解决问题始终是一个最好的方法:     SELECT EXECUTIONS , DISK_READS, BUFFER_GETS, ROUND((BUFFER...

SQL Server 暂无评论 阅读(1,779)

SQL优化经验总结2

(10) 尽量多使用COMMIT: 只要有可能,在程序中尽量多使用COMMIT, 这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少:   COMMIT所释放的资源:   a. 回滚段上用于恢复数据的信息.   b. 被程序语句获得的锁   c. redo log buffer 中的空间   d. ORACLE为管理上述3种资源中的内部花费   (11) 用Where子句替换HAVING子句:   避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作. 如果能通过WHERE子句限制记录的数目...

SQL Server 暂无评论 阅读(1,881)

SQL优化 经验总结1

我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习、摘录、并汇总部分资料与大家分享! (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. (2) WHERE子句中的连接顺序.: OR...

MySQL, Oracle, SQL Server 暂无评论 阅读(2,009)

向表中一列插入1-100的连续数

求助:向表中一列插入1-100的连续数 table A 中有BH字段(INT),怎么连续给BH赋值1-100,象下面的一样 BH  ------------------------------------------------ 1 2 . . . 100 根据常规的方法,我们会想到使用While来实现以上的功能。如,一朋友所写的这样: CREATE TABLE TestTable(BH INT) GO SET NOCOUNT ON GO DECLARE @MyCounter INT SET @MyCounter = 1 WHILE (@MyCounter < 101) BEGIN INSERT INTO TestTable VALUES (@MyCounter ) SET @MyCounter = @MyCounter + 1 END GO SET NOCOUNT OFF GO se...

SQL Server 暂无评论 阅读(3,302)

SQL树型求和

SQLServer树型求和 set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- this document design by zzl -- -- function : total about a tree structure -- author : Lori.zhang ,zzl -- display view : a1   3 --                a11  2 --                a111 1 ------------------------------------------ ALTER  proc [dbo].[zzl_task_tree_total] --通过指定的taskid,来获取它和它下面的所有子元素的汇总和 @taskid int as declare @level_tt table(taskid nvarchar(1000),parentID nvarchar(1000),level in...

MySQL, Oracle, SQL Server 暂无评论 阅读(2,659)