温华1994 2021-08-06 18:06 采纳率: 0%
浏览 35

为什么同样的SQL带括号比不带括号查询速度快

表结构:


CREATE TABLE `player_property` (
  `n_roleid` int(11) NOT NULL COMMENT '玩家角色ID',
  `s_vocation` varchar(1) NOT NULL COMMENT '职业',
  `n_vcurrency` bigint(20) NOT NULL COMMENT '游戏中产生和流通虚拟币,\\n            并非人民币充值。',
  `n_lv` smallint(6) NOT NULL COMMENT '等级',
  `n_exp` bigint(20) DEFAULT NULL COMMENT '经验',
  `d_last_online` datetime DEFAULT NULL COMMENT '最后在线时间',
  `n_online_time` int(11) DEFAULT NULL COMMENT '在线时长',
  `s_online` varchar(1) DEFAULT NULL COMMENT '1-在线 其他不在线',
  `d_last_login` datetime DEFAULT NULL COMMENT '最后登录时间',
  `n_force` bigint(20) DEFAULT NULL COMMENT '战斗力',
  `s_last_mac` varchar(80) DEFAULT NULL COMMENT '最后一次登录游戏的设备MAC',
  `d_save` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  `n_rank` tinyint(4) DEFAULT NULL COMMENT '当前官品',
  `n_max_rank` tinyint(4) DEFAULT NULL COMMENT '历史最高官品',
  `n_retinue_id` int(11) DEFAULT NULL COMMENT '主角随从ID',
  `n_equip_smelt` int(11) DEFAULT NULL COMMENT '装备熔炼值',
  `s_longitude` varchar(11) DEFAULT NULL COMMENT '坐标经度',
  `s_latitude` varchar(11) DEFAULT NULL COMMENT '坐标纬度',
  `n_exploit` int(11) DEFAULT NULL COMMENT '功勋值',
  `s_head` varchar(200) DEFAULT NULL COMMENT '头像',
  `n_head_side` smallint(6) DEFAULT NULL COMMENT '头像边框',
  `s_sign` varchar(100) DEFAULT NULL COMMENT '个性签名',
  `n_age` smallint(6) DEFAULT NULL COMMENT '真实年龄',
  `n_gender` tinyint(4) DEFAULT NULL COMMENT '真实性别',
  `s_area` varchar(100) DEFAULT NULL COMMENT '地区',
  `n_popular` bigint(20) DEFAULT NULL COMMENT '人气值',
  `n_last_channel` int(11) DEFAULT NULL COMMENT '最后连接的聊天频道',
  `n_charmnum` int(11) DEFAULT NULL COMMENT '魅力值',
  `n_fans` int(11) DEFAULT NULL COMMENT '粉丝数',
  `n_idol` int(11) DEFAULT '0' COMMENT '关注数',
  `n_camp` tinyint(4) DEFAULT NULL COMMENT '阵营',
  `s_rank_speak` varchar(100) DEFAULT NULL COMMENT '官场喊话内容',
  `s_fashion` varchar(100) DEFAULT NULL COMMENT '时装(时装id,时装id,时装id)',
  `n_chat_side` smallint(6) DEFAULT NULL COMMENT '聊天边框',
  `s_official_slap_head` varchar(50) DEFAULT NULL COMMENT '官权掌嘴头像(力道id_过期时间秒数)',
  `s_character` varchar(200) DEFAULT NULL COMMENT '性格',
  `s_birthday` varchar(50) DEFAULT NULL COMMENT '生日',
  `n_constellation` tinyint(4) DEFAULT NULL COMMENT '星座',
  `n_background` smallint(6) DEFAULT NULL COMMENT '背景',
  `n_lovers_tree_id` bigint(20) DEFAULT NULL COMMENT '姻缘树id',
  `n_marriage_id` bigint(20) DEFAULT NULL COMMENT '联姻id',
  `n_reinLv` smallint(6) DEFAULT NULL COMMENT '转生等级',
  `s_role_skill` varchar(100) DEFAULT NULL COMMENT '主角技能',
  `n_back_ornament_id` int(11) DEFAULT NULL COMMENT '背饰id',
  `n_role_quality` tinyint(4) DEFAULT NULL COMMENT '主角品质',
  PRIMARY KEY (`n_roleid`),
  KEY `idx_player_property20` (`d_save`),
  KEY `idx_player_property1` (`d_last_online`),
  KEY `idx_player_property2` (`s_online`),
  KEY `idx_player_property3` (`n_force`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='玩家属性值表';
CREATE TABLE `player_friend` (
  `n_roleid` int(11) NOT NULL COMMENT '玩家角色ID',
  `n_froleid` int(11) NOT NULL COMMENT '好友角色ID',
  `d_last_gift` datetime DEFAULT NULL COMMENT '上次送礼时间',
  `d_last_chat` datetime DEFAULT NULL COMMENT '上次聊天时间',
  `n_relation` int(11) DEFAULT NULL COMMENT '亲密度',
  `n_type` tinyint(4) DEFAULT NULL COMMENT '关系标记 1:好友 -1:仇敌',
  `n_relation_id` int(11) DEFAULT NULL COMMENT '关系id',
  `n_relation_time` int(11) DEFAULT NULL COMMENT '建立关系时间(秒数)',
  PRIMARY KEY (`n_roleid`,`n_froleid`),
  KEY `idx_player_friend1` (`n_froleid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色_好友表';
CREATE TABLE `player_label` (
  `n_roleid` int(11) NOT NULL COMMENT '玩家ID',
  `n_id` smallint(6) NOT NULL COMMENT '标签ID',
  `n_praise` smallint(6) DEFAULT NULL COMMENT '标签点赞数',
  `d_setTime` datetime DEFAULT NULL COMMENT '标签设置时间',
  PRIMARY KEY (`n_roleid`,`n_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='玩家_标签信息表';

第一个SQL


(SELECT n_roleid FROM player_property pp WHERE NOT EXISTS 
(SELECT 1 FROM player_friend WHERE n_roleid = 80007 AND n_froleid = pp.n_roleid UNION (SELECT n_roleid FROM player_label WHERE n_roleid = pp.n_roleid)) 
AND n_lv <= 390  ORDER BY n_lv DESC LIMIT 80 );

查询速度:
img

第二个SQL

SELECT n_roleid FROM player_property pp WHERE NOT EXISTS 
(SELECT 1 FROM player_friend WHERE n_roleid = 80007 AND n_froleid = pp.n_roleid UNION (SELECT n_roleid FROM player_label WHERE n_roleid = pp.n_roleid)) 
AND n_lv <= 390  ORDER BY n_lv DESC LIMIT 80;

查询速度:

img

查询环境均在内网环境数据量不多的情况下,生成环境的区别是几分钟和几秒的差别!

求解惑!

  • 写回答

2条回答 默认 最新

  • CSDN专家-sinJack 2021-08-06 18:17
    关注

    这是同一套数据库吗,数据量一样?
    分别查询一下执行计划,explain sql
    看下索引使用情况。

    评论

报告相同问题?

问题事件

  • 修改了问题 8月6日
  • 创建了问题 8月6日

悬赏问题

  • ¥15 电子档案元素采集(tiff及PDF扫描图片)
  • ¥15 flink-sql-connector-rabbitmq使用
  • ¥15 zynq7015,PCIE读写延时偏大
  • ¥15 使用spss做psm(倾向性评分匹配)遇到问题
  • ¥20 vue+UEditor附件上传问题
  • ¥15 想做个WPS的自动化代码,不知道能做的起不。
  • ¥15 uniApp,生成安卓安卓包后,黑暗主题中间内容不生效,底部导航正常
  • ¥15 斯坦福自动漂移非线性模型反解
  • ¥15 学习Python如何找兼职
  • ¥15 python结合Matlab仿真忆阻器