摘要: 概要什么是单一索引,什么又是复合索引呢? 何时新建复合索引,复合索引又需要注意些什么呢?本篇文章主要是对网上一些讨论的总结。一.概念单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上。用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引)。复合索引的创建方法与创建单一索引的方法完全 阅读全文
posted @ 2017-07-26 18:50 有梦就能实现 阅读(385) 评论(0) 推荐(0) 编辑
摘要: 说说复合索引 写索引的博客太多了,一直不想动手写,有一下两个原因:一是觉得有炒剩饭的嫌疑,有兄弟曾说:索引吗,只要在查询条件上建索引就行了,真的可以这么暴力吗?二来觉得,索引是个非常大的话题,很难概括出所有的情况,你不整出点新意来,倒是有抄袭照搬的嫌疑 既然写了,就写一点稍微不一样的东西出来,好了, 阅读全文
posted @ 2017-07-26 18:48 有梦就能实现 阅读(3058) 评论(0) 推荐(0) 编辑
摘要: SQL 不同于与其他编程语言的最明显特征是处理代码的顺序。在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后被处理。 每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用 阅读全文
posted @ 2017-07-26 18:45 有梦就能实现 阅读(460) 评论(0) 推荐(0) 编辑
摘要: 查询时,如果数据量很大,where 后面的条件与建索引的顺序相同,也没有什么多少差别,聚集索引稍微快点; 但where 后面的条件与建索引顺序不同,速度会慢下来,到底慢多少,不同的机器会不一样,没有绝对的说法。MSSQL引擎首先对条件进行优化,优化以后再查询。1,还是那句,先看执行计划。2.2008 阅读全文
posted @ 2017-07-26 18:43 有梦就能实现 阅读(3099) 评论(0) 推荐(0) 编辑
摘要: SQL的where执行顺序 1 mysql 从左到右. 一个原则,排除越多的条件放到第一个 例子:抄的。 SELECT … WHERE p.languages_id = 1 AND m.languages_id = 1 AND c.languages_id = 1 AND t.languages_i 阅读全文
posted @ 2017-07-26 18:29 有梦就能实现 阅读(2173) 评论(0) 推荐(0) 编辑
摘要: 经常有人问到oracle中的Where子句的条件书写顺序是否对SQL性能有影响,我的直觉是没有影响,因为如果这个顺序有影响,Oracle应该早就能够做到自动优化,但一直没有关于这方面的确凿证据。在网上查到的文章,一般认为在RBO优化器模式下无影响(10G开始,缺省为RBO优化器模式),而在CBO优化 阅读全文
posted @ 2017-07-26 18:28 有梦就能实现 阅读(948) 评论(0) 推荐(0) 编辑
摘要: 昨天经历了一场非常痛苦的性能调优过程,但是收获也是刻骨铭心的,感觉对sql引擎的原理有了进一步认识。 问题起源于测试人员测一个多条件检索的性能时,发现按某个条件查询会特别慢。对应的sql语句简化为: [sql] view plain copy print? select * from ta a,tb 阅读全文
posted @ 2017-07-26 18:21 有梦就能实现 阅读(3368) 评论(0) 推荐(0) 编辑
摘要: 在编写SQL时,会建议将选择性高(过滤数据多)的条件放到WHERE条件的前面,这是为了让查询优化器优先考虑这些条件,减少生成最优(或相对最优)的执行计划的时间,但最终的执行计划生成过滤顺序还是决定这些条件的选择性与判断bool值的容易程度 测试代码: 执行计划: 可以从查询计划看出,无论T1.[ob 阅读全文
posted @ 2017-07-26 18:14 有梦就能实现 阅读(313) 评论(1) 推荐(0) 编辑
摘要: 我们要做到不但会写SQL,还要做到写出性能优良的SQL语句。(1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下, 阅读全文
posted @ 2017-07-26 18:10 有梦就能实现 阅读(230) 评论(0) 推荐(0) 编辑