`
li2005
  • 浏览: 38703 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

慎用mysql嵌套

阅读更多
昨天弄了句SQL,把数据库给弄crash了,引以为戒
差不多是这个样子的
SELECT Photo.* FROM Photo WHERE (Photo.Parent in (select CONCAT('AssociationEvent-', AssociationEvent.ID) as Parent from AssociationEvent WHERE AssociationEvent.Association = 98 union select CONCAT('PersonAssociation-', PersonAssociation.ID) as Parent from PersonAssociation WHERE PersonAssociation.IsBrothersOnly = 0 and PersonAssociation.Association = 98)) ORDER BY Sequence DESC  LIMIT 8 

这个in里面有个嵌套語句
mysql> explain SELECT Photo.* FROM Photo WHERE (Photo.Parent in (select CONCAT('AssociationEvent-', AssociationEvent.ID) as Parent from AssociationEvent WHERE AssociationEvent.Association = 98 union select CONCAT('PersonAssociation-', PersonAssociation.ID) as Parent from PersonAssociation WHERE PersonAssociation.IsBrothersOnly = 0 and PersonAssociation.Association = 98)) ORDER BY Sequence DESC  LIMIT 8 ;
+----+--------------------+-------------------+--------+---------------+----------+---------+------+------+-------------+
| id | select_type        | table             | type   | possible_keys | key      | key_len | ref  | rows | Extra       |
+----+--------------------+-------------------+--------+---------------+----------+---------+------+------+-------------+
|  1 | PRIMARY            | Photo             | index  | NULL          | Sequence | 5       | NULL | 3199 | Using where | 
|  2 | DEPENDENT SUBQUERY | AssociationEvent  | system | NULL          | NULL     | NULL    | NULL |    1 |             | 
|  3 | DEPENDENT UNION    | PersonAssociation | system | NULL          | NULL     | NULL    | NULL |    1 |             | 
| NULL | UNION RESULT       | <union2,3>        | ALL    | NULL          | NULL     | NULL    | NULL | NULL |             | 
+----+--------------------+-------------------+--------+---------------+----------+---------+------+------+-------------+
4 rows in set (0.00 sec)

可以看到,mysql执行这句话时,会有很多步骤,当数据量一大,它就不行了
分享到:
评论

相关推荐

    要慎用mysql的enum字段的原因

    MySQL中的ENUM类型是一种预定义的字符串类型,它允许我们在创建表时限制某个字段只能接受预设的一组值。然而,在实际应用中,特别是在与PHP这样的弱类型语言配合使用时,ENUM字段常常引发一些问题,因此建议谨慎使用...

    加密的惨剧!慎用文件夹加密软件!

    加密的惨剧!慎用文件夹加密软件! 加密的惨剧!慎用文件夹加密软件!

    暴力删除一切顽固文件,慎用!

    把要删除的文件拖到这个文件上面即可。注意,这是强力删除。一定慎用,因为连垃圾箱都会没有的。

    易语言处理事件命令慎用时钟版

    易语言处理事件命令慎用时钟版源码,处理事件命令慎用时钟版

    mysql百万量级优化

    4. **慎用`OR`连接条件** - `OR`操作符会使得MySQL无法使用索引来优化查询。可以采用多个`SELECT`语句联合查询的方式替代。 - 示例:将`SELECT id FROM t WHERE num = 10 OR num = 20;`改为`SELECT id FROM t ...

    mysql数据库sql优化

    #### 策略6:不等于要慎用 使用不等于操作符(`!=` 或 `)` 通常会导致全表扫描,因为这些操作无法利用索引。 - **示例**: - 使用不等于操作符: ```sql EXPLAIN SELECT * FROM staffs WHERE NAME!='July'; ...

    mysql 千万级数据优化

    5. IN 和 NOT IN 也要慎用,否则会导致全表扫描。 6. 如果在 WHERE 子句中使用参数,也会导致全表扫描。 7. 避免在 WHERE 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。 8. 避免在 WHERE ...

    SQL_MSDE清理小程序(慎用)

    SQL和MSDE清理小程序(慎用),SQL和MSDE清理小程序(慎用),SQL和MSDE清理小程序(慎用),

    慎用六大软件伤硬盘最终版.pdf

    慎用六大软件伤硬盘最终版.pdf

    慎用动态编译

    标题“慎用动态编译”指的是在编程过程中对动态编译这一技术的谨慎态度。动态编译是程序运行时根据需要将源代码编译为可执行代码的过程,与静态编译(编译时一次性完成)形成对比。在Java中,JIT(Just-In-Time)...

    玩客云 灯光控制 容易烧主板 慎用

    玩客云 灯光控制 容易烧主板 慎用

    慎用ext.zip

    标题“慎用ext.zip”可能指的是在编程或系统管理中,对使用特定扩展名如“ext.zip”可能带来的潜在问题的警示。虽然描述部分没有提供具体信息,但我们可以基于这个标题来探讨一下在处理zip文件,特别是那些带有“ext...

    慎用抗生素 刻不容缓 (小品).docx

    慎用抗生素 刻不容缓 (小品).docx

    冰冻精灵清除器慎用.rar

    然而,随着这些软件的普及,针对其的专门清除工具也逐渐出现在网络上,比如被标记为“慎用”的“冰冻精灵清除器”压缩文件。这种工具的出现,既满足了部分用户在特殊情况下需要卸载或禁用冰冻精灵的需求,也带来了...

    易语言处理事件命令慎用时钟版源码.7z

    《易语言处理事件命令慎用时钟版源码解析》 易语言,作为一款由中国程序员设计的编程语言,以其简洁的语法和贴近自然语言的特点,为初学者提供了友好的编程环境。然而,对于任何编程语言而言,理解并合理使用各种...

    初中语文文摘生活慎用何首乌治白发

    初中语文文摘生活慎用何首乌治白发

    易语言处理事件命令慎用线程版源码

    易语言处理事件命令慎用线程版源码。@易语言源码分享站。

Global site tag (gtag.js) - Google Analytics