数据库的一些语句优化小技巧
来源:互联网 发布:程序员小品剧本 编辑:程序博客网 时间:2024/05/20 01:35
1.select 1 from tablename
其实它与select * from tablename或select 列名 from tablename效果是一样的,但是从执行效率来看:select 1 > select 列名 > select *。
2.select 1 from tablename where xxx limit 1
当确定查询语句只有一条记录时,使用limit 1避免全表扫描,当查询到一条数据就立即返回,不会再往后查找。
3.UNION和UNION ALL
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果 .
而UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了.
从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL.
4.in ,not in,exists,not exists
in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为exists比in效率高的说法是不准确的。如果查询的两个表大小相当,那么用in和exists差别不大;如果两个表中一个较小一个较大,则子查询表大的用exists,子查询表小的用in;
例如:表A(小表),表B(大表)
select * from A where cc in(select cc from B) -->效率低,用到了A表上cc列的索引;select * from A where exists(select cc from B where cc=A.cc) -->效率高,用到了B表上cc列的索引。
相反的:
select * from B where cc in(select cc from A) -->效率高,用到了B表上cc列的索引select * from B where exists(select cc from A where cc=B.cc) -->效率低,用到了A表上cc列的索引。如果查询语句使用了not in,那么对内外表都进行全表扫描,没有用到索引;而not exists的子查询依然能用到表上的索引。所以无论哪个表大,用not exists都比not in 要快。
阅读全文
0 0
- 数据库的一些语句优化小技巧
- 书写SQL语句的一些小技巧
- Java性能优化的一些小技巧
- 关于sql优化的一些小技巧
- 博客文章优化的一些小技巧
- Android布局优化的一些小技巧
- 数据库优化小技巧
- Oracle 数据库应用的一些小技巧
- oracle数据库迁移的一些小技巧
- MYSQL数据库设计的一些小技巧
- 数据库设计的一些小技巧
- sql语句优化小技巧
- sql语句优化小技巧
- 数据库优化实例以及优化的小技巧
- sql语句优化的小技巧(①)
- 数据库查询优化小技巧
- 数据库查询优化小技巧
- 试述优化程序的一些小技巧
- Android 进阶学习
- 01 组态王初探
- struts2与springMvc下的AJax异步数据交互1
- Akita与脉冲云的关系
- 程序的机器级表示
- 数据库的一些语句优化小技巧
- laravel 接收get传值Request
- C++std命名空间详解
- 5---(1)语义化标签
- 关于EMD算法的认知
- 使用FileChannel来实现文件快速复制(下载)
- Hadoop之Mapreducer里的Partitioner(笔记25)
- 需求--EPPA论文笔记(1)
- 成员变量和局部变量区别