sql查询语句的优化,exists与in的更换
2014-11-27 00:00
411 查看
小站的页面访问查询的速度一直不让人满意,刚好今天有时间,就决定对它优化一下。
因为在本地开时发,查询的速度是相当快的,一开始就以为是mysql版本的问题,本地是MariaDB 5.5,服务器上是mysql 5.1,
将服务器上的数据弄到本地导了一份,居然发现一样变慢了,平均查询一个文章要1-2秒,列表超过2秒以上,才几千的数据这么慢肯定是哪里出了问题。
一点一点的定位打印日志,最后发现,居然是一条使用了exists的sql语句,查询就用了2秒,也就是说时间都花在这个上了,其它的基本都可以忽略了,语句如下:
文章和分类的关联,这个语句没什么特别的地方,分开执行都是零点零几毫秒,拼在一起居然要2秒,不可思议。
难道是这个exists影响了吗?将exist换成in试一下:
立马见效,查询时间从2秒提升为零点1毫秒左右,还真是这个exists的缘故。
网上都说exists的效率要高于in或才not in,看来也不尽然,具体情况还得具体分析啊,像在这里就比in差了20倍不止。
看来要好好研究一个exists这个关键字了。
因为在本地开时发,查询的速度是相当快的,一开始就以为是mysql版本的问题,本地是MariaDB 5.5,服务器上是mysql 5.1,
将服务器上的数据弄到本地导了一份,居然发现一样变慢了,平均查询一个文章要1-2秒,列表超过2秒以上,才几千的数据这么慢肯定是哪里出了问题。
一点一点的定位打印日志,最后发现,居然是一条使用了exists的sql语句,查询就用了2秒,也就是说时间都花在这个上了,其它的基本都可以忽略了,语句如下:
select * from TERM t where exists (select t2.TERM_ID from ASS_POST_TERM t2 where t.TERM_ID = t2.TERM_ID and t2.POST_ID = ?)
文章和分类的关联,这个语句没什么特别的地方,分开执行都是零点零几毫秒,拼在一起居然要2秒,不可思议。
难道是这个exists影响了吗?将exist换成in试一下:
select * from TERM t where t.TERM_ID in (select t2.TERM_ID from ASS_POST_TERM t2 where t2.POST_ID = ?)
立马见效,查询时间从2秒提升为零点1毫秒左右,还真是这个exists的缘故。
网上都说exists的效率要高于in或才not in,看来也不尽然,具体情况还得具体分析啊,像在这里就比in差了20倍不止。
看来要好好研究一个exists这个关键字了。
相关文章推荐
- sql查询语句的优化,exists与in的更换
- sql查询语句的优化,exists与in的更换
- sql查询语句的优化,exists与in的更换
- 【SQL】查询语句中in和exists的区别
- Oracle sql"NOT IN"语句优化,查询A表有、B表没有的数据
- Oracle sql"NOT IN"语句优化,查询A表有、B表没有的数据
- sql语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句
- 【SQL】查询语句中in和exists的区别
- 如何用外部程序优化SQL语句中的IN和EXISTS
- 关于所使用的spark版本中的spark sql不支持exists和in等子查询语句的解决方案记录
- sql语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句
- Sql语句优化之用exists、not exists替代in、not in
- sql语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句
- sql查询语句中 in和 exists的区别与性能比较
- SQL语句优化—in,not in,exists,not exists, left join...on
- sql语句优化--用EXISTS替代IN、用NOT EXISTS替代NOT IN
- sql语句的优化分析之一查询语句中左连接和函数效率分析比较
- LINQ体验(7)——LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains
- LINQ体验(7)——LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains
- Entity SQL Language 三 Where/Exists/In/Like/参数及外键查询