当前位置:天才代写 > tutorial > 其他教程 > 编程语言-5段SQL小测试让你充分了解清楚SQL性能优化问题

编程语言-5段SQL小测试让你充分了解清楚SQL性能优化问题

2018-05-23 08:00 星期三 所属: 其他教程 浏览:654

在编程语言中通过简单的5段SQL就能测试出你对SQL性能多少调整的知识,而这5段SQL都是我们平时常写SQL,但有点经过一番简单的优化,或者换了其他写法,也许是他的执行效率efficiencyIt将有数倍的增加。我们大家不妨简单的测试一下,了解一下自己的学习水平吧。

我们都知道数据库是非常强大的,它可以比预期的执行性能实现。但许多人不能玩,很容易写的最有效的算法SQL查询,从而容易出现不可预知的性能结果。

1、  查询2014年所有的行

 

1

2

CREATE INDEX tbl_idx ON tbl (date_column);

SELECT text,date_column FROM tbl WHERE TO_CHAR(date_column,’YYYY’) = ‘2014’;

       有过SQL优化经验的人也许会问,这样写没问题啊,将出现在条件中的字段加索引,可以起到优化SQL的作用,怎么会有问题呢?有这样疑问的朋友对数据库优化还是有所了解的,但是你忽略了一点:不管是ORACLE还是其他数据库,一旦将字段放在函数里执行,该字段的索引将不起作用。那么正确的写法如下:

1

2

3

SELECT text,date_column FROM tbl

WHERE date_column >= TO_DATE(‘2014-01-01′,’YYYY-MM-DD’)

AND date_column < TO_DATE('2015-01-01','YYYY-MM-DD');

 

2、查询出最近日期的一行数据

1

2

3

4

5

6

7

CREATE INDEX tbl_idx ON tbl (a,date_column);

SELECT *

FROM(

SELECT id,date_column FROM tbl WHERE a = :a

ORDER BY date_column DESC

     )

WHERE rownum <=1;

       这段SQL很经典,开发中很多地方都可能会用到类似这样的查询。没错,这段SQL是不需要优化的,它可以按照经过索引的 Top-N 查询方式执行,它的效率跟 INDEX UNIQUE SCAN(唯一索引扫描) 是等效的,所以会非常快。

 

3、两个查询语句,通过一个普通列查询:

1

2

3

4

5

6

7

8

9

10

11

CREATE INDEX tbl_idx ON tbl (a,b);

                                                                                                                                 

SELECT id,a,b

FROM tbl

WHERE a = :a

AND b= :b;

                                                                                                                                 

                                                                                                                                 

SELECT id,a,b

FROM tbl

WHERE b = :b;

       这个很简单,只有第一个SQL用到了索引,而第二个却无法使用索引。其实这就是单索引与组合索引在使用上的区别。

 

4、字符串模糊查询

1

2

3

4

5

CREATE INDEX tbl_idx ON tbl (text);

#p#分页标题#e#

                                                                   

SELECT id,text

FROM tbl

WHERE text LIKE ‘%uncletoo%’;

       在前面的文章中,我们曾经说过 like 语句如何使用通配符才能提高效率(8个SQL语句常用优化技巧)。当条件中遇到 like 语句,那么无论该字段是否设置索引效果都一样,因为索引遇到 like 就会无法发挥其效能,而且也没有更好的解决办法,因此建议大家除非万不得已,否则不要轻易使用 like 语句。

 

5、查询某条件下的记录数

1

2

3

4

5

6

7

8

9

10

11

12

13

CREATE INDEX tbl_idx ON tbl (a,date_column);

                                      

SELECT date_column,count(*)

FROM tbl

WHERE a= :a

GROUP BY date_column;

                                      

                                      

SELECT date_column,count(*)

FROM tbl

WHERE a= :a

AND b = :b

GROUP BY date_column;

       

以上两个疑问,你会发现第一个十万条记录几万,第二个声明,因为更多的条件,只能检测几个或者几十条记录,也许你会认为这条语句的效率更快。事实上正好相反,更快的执行第一条语句的效率。因为第一条语句中,索引覆盖了所有查询字段,而第二个SQL中的b条件没有索引。看了以上5段SQL小测试,大家是否对自身学习有了更多的了解呢?更多有趣使用的编程语言学习可以关注我们的编程培训。

 

 

    关键字:

天才代写-代写联系方式