首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL EXISTS()非常慢

MySQL EXISTS()非常慢
EN

Stack Overflow用户
提问于 2013-02-22 10:26:44
回答 2查看 920关注 0票数 1

此查询

代码语言:javascript
AI代码解释
复制
SELECT
    itemID,
    locationParentID,
    locationID,
    categoryParentID,
    categoryID,
    itemTitle,
    itemDetails,
    itemAttributes,
    itemPictures,
    itemFeatured,
    itemSpotlight,
    itemAdded
FROM items
WHERE items.siteID IN('".$cfg['site']['siteShares']."') 
    AND EXISTS(SELECT 1 FROM sites_locations sl WHERE items.locationID  = sl.locationID AND siteID = '".$cfg['site']['siteID']."' LIMIT 1)
    AND EXISTS(SELECT 1 FROM sites_categories sc WHERE items.categoryID = sc.categoryID AND siteID = '".$cfg['site']['siteID']."' LIMIT 1)
    AND itemStatus = '1'
    AND itemAdded > '".$cfg['timestamp']."'

有效,但最多需要6秒

我可以使用JOIN,因为我猜它会更快

下面是我尝试使用JOIN的方法,但它返回所有结果,而不仅仅是在sites_location表中有位置的项。

代码语言:javascript
AI代码解释
复制
SELECT 
    itemID, 
    locationParentID, 
    categoryParentID, 
    categoryID, 
    itemTitle, 
    itemDetails, 
    itemAttributes, 
    itemPictures, 
    itemFeatured, 
    itemSpotlight, 
    itemAdded 
FROM items LEFT JOIN sites_locations 
    ON items.locationID = sites_locations.locationID 
    AND sites_locations.siteID = items.siteID 
WHERE items.siteID IN('1,2')  AND itemStatus = '1'
    AND itemAdded > '1356048000' ORDER BY itemID DESC LIMIT 15
EN

回答 2

Stack Overflow用户

发布于 2013-02-22 10:33:52

不确定是否在第二个查询中对表sites_categories进行联接。

票数 0
EN

Stack Overflow用户

发布于 2013-02-22 13:47:02

当两个表中至少有一个匹配项时,INNER JOIN关键字将返回行。

LEFT JOIN关键字返回左表(table_name1)中的所有行,即使右表(table_name2)中没有匹配项也是如此。

这就是为什么您无法获取值的原因

Check this link

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15021956

复制
相关文章
mysql中not exists用法_not exists用法
not exists是sql中的一个语法,常用在子查询和主查询之间,用于条件判断,根据一个条件返回一个布尔值,从而来确定下一步操作如何进行,not exists也是exists或in的对立面。
全栈程序员站长
2022/09/13
9.8K0
mysql中not exists用法_not exists用法
Mysql exists用法小记
EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False。
翎野君
2023/05/12
6500
Navicat连接Mysql,打开数据表非常慢解决方法
博主最近开发中遇到关于Navicat经常非常慢接近卡死的问题!困扰了我很久,今天终于知道原因了!这里分享给大家!希望对大家有所帮助!
王图思睿
2021/06/15
8K1
Navicat连接Mysql,打开数据表非常慢解决方法
Mysql慢查询_mysql服务启动慢
1、查看是否开启:show variables like ‘slow_query_log’;
全栈程序员站长
2022/11/04
6.3K0
Mysql慢查询_mysql并发查询慢
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10S以上的语句。默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。
全栈程序员站长
2022/11/07
21.6K0
Mysql慢查询_mysql并发查询慢
idea使用debug模式启动非常慢
后来发现,之前在调试代码时不注意给属性加了断点,去掉idea的Breakpoints里的java field watchpoints就不卡了,如下:
凯哥Java
2022/12/16
2.7K0
idea使用debug模式启动非常慢
Xshell/Xftp连接Linux速度非常慢(已解决)
1、打开sshd服务的配置文件/etc/ssh/sshd_config,把UseDNS yes改为UseDNS no
Arebirth
2020/06/19
6.3K0
mysql慢查询sql统计_mysql服务启动慢
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值(long_query_time,单位:秒)的SQL语句。默认情况下,MySQL不启动慢查询日志。本文简单介绍如何开启慢查询日志,如何用mysqldumpslow分析慢查询。
全栈程序员站长
2022/11/04
4K0
mysql慢日志查询_mysql开启慢查询日志
然后执行一条sql语句,执行时间大于你所设置的long_query_time,我执行了一条sql语句执行时间为1.468s
全栈程序员站长
2022/11/04
9.5K0
Mysql 慢日志
my.cnf 是windows环境下的配置文件,my.ini是linux下的配置文件
收心
2022/01/14
4K1
Mysql 慢日志
mysql中exists的用法详解[通俗易懂]
在日常开发中,用mysql进行查询的时候,有一个比较少见的关键词exists,我们今天来学习了解一下这个 exists这个sql关键词的用法,这样在工作中遇到一些特定的业务场景就可以有更加多样化的解决方案
全栈程序员站长
2022/11/01
6.7K0
原exists, not exists用法
tableA |column1 | column1 |column3 | ---- tableb |column1 | column1 |column3 | ---- 要查询 tableA 的数据,条件是是 tableA.column1 不在 tableB 的 tableB.column2 中 也就是要得到类似以下语句的效果(not in 效果不完全等同于 not exists , 如果子查询中出现空记录, 则整个查询语句不会返回数据) SELECT a.* FROM tableA a
zcqshine
2018/05/11
1.2K0
MySQL慢查询(一) – 开启慢查询[通俗易懂]
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说MySQL慢查询(一) - 开启慢查询[通俗易懂],希望能够帮助大家进步!!!
Java架构师必看
2022/02/10
4.5K0
MySQL not exists 真的不走索引么?
在一些业务场景中,会使用NOT EXISTS语句确保返回数据不存在于特定集合,部分同事会发现NOT EXISTS有些场景性能较差,甚至有些网上谣言说”NOT EXISTS不走索引”,哪对于NOT EXISTS语句,我们如何优化呢?
Java技术栈
2020/08/20
3.2K0
MySQL not exists 真的不走索引么?
大表分页查询非常慢,怎么办?
在实际的软件系统开发过程中,随着使用的用户群体越来越多,表数据也会随着时间的推移,单表的数据量会越来越大。
Java极客技术
2022/12/04
1.9K0
大表分页查询非常慢,怎么办?
MySQL慢查询(一) - 开启慢查询
转载自https://www.cnblogs.com/luyucheng/p/6265594.html
allsmallpig
2021/02/25
3.2K0
MySQL(七)|MySQL中In与Exists的区别(1)
最近被一条SQL语句弄的有点兴奋,具体情况是这样的... 我这边有两个表需要关联查询,表的情况如下: # 2759174行数据 SELECT COUNT(*) FROM tb_data t1; # 7262行数据 SELECT COUNT(*) FROM tb_task t2; # 执行时间为44.88s SELECT SQL_NO_CACHE t1.id FROM tb_data t1 WHERE t1.task_id IN (SELECT t2.id FROM tb_task t2); # 执行
黄小怪
2018/06/06
17.9K1
MySQL(八)|MySQL中In与Exists的区别(2)
关于In与Exists的比较,先说结论,归纳出IN 和Exists的适用场景: 1)IN查询在内部表和外部表上都可以使用到索引。 2)Exists查询仅在内部表上可以使用到索引。 3)当子查询结果集很大,而外部表较小的时候,Exists的Block Nested Loop(Block 嵌套循环)的作用开始显现,并弥补外部表无法用到索引的缺陷,查询效率会优于IN。 4)当子查询结果集较小,而外部表很大的时候,Exists的Block嵌套循环优化效果不明显,IN 的外表索引优势占主要作用,此时IN的查询
黄小怪
2018/06/06
4.9K0
mysql慢查询日志默认在哪里_MySQL 慢查询日志[通俗易懂]
MySQL 的慢查询日志是 MySQL 提供的一种日志记录,它用来记录在 MySQL 中查询响应时间超过阈值的语句,具体指响应时间超过
全栈程序员站长
2022/11/19
6K0
mysql慢查询日志默认在哪里_MySQL 慢查询日志[通俗易懂]
Mysql资料 慢查询
MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句。
陈不成i
2021/06/09
2.4K0

相似问题

Oracle将OR + IN“优化”为OR + EXISTS,这非常慢

15

mysql join非常慢

31

MySql查询非常慢

11

MySQL查询非常慢

24

MYSQL插入非常慢

210
交个朋友
加入前端学习入门群
前端基础系统教学 经验分享避坑指南
加入腾讯云技术交流站
前端技术前沿探索 云开发实战案例分享
加入云开发企业交流群
企业云开发实战交流 探讨技术架构优化
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档