昨天弄了句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类型是一种预定义的字符串类型,它允许我们在创建表时限制某个字段只能接受预设的一组值。然而,在实际应用中,特别是在与PHP这样的弱类型语言配合使用时,ENUM字段常常引发一些问题,因此建议谨慎使用...
加密的惨剧!慎用文件夹加密软件! 加密的惨剧!慎用文件夹加密软件!
把要删除的文件拖到这个文件上面即可。注意,这是强力删除。一定慎用,因为连垃圾箱都会没有的。
易语言处理事件命令慎用时钟版源码,处理事件命令慎用时钟版
4. **慎用`OR`连接条件** - `OR`操作符会使得MySQL无法使用索引来优化查询。可以采用多个`SELECT`语句联合查询的方式替代。 - 示例:将`SELECT id FROM t WHERE num = 10 OR num = 20;`改为`SELECT id FROM t ...
#### 策略6:不等于要慎用 使用不等于操作符(`!=` 或 `)` 通常会导致全表扫描,因为这些操作无法利用索引。 - **示例**: - 使用不等于操作符: ```sql EXPLAIN SELECT * FROM staffs WHERE NAME!='July'; ...
5. IN 和 NOT IN 也要慎用,否则会导致全表扫描。 6. 如果在 WHERE 子句中使用参数,也会导致全表扫描。 7. 避免在 WHERE 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。 8. 避免在 WHERE ...
SQL和MSDE清理小程序(慎用),SQL和MSDE清理小程序(慎用),SQL和MSDE清理小程序(慎用),
慎用六大软件伤硬盘最终版.pdf
标题“慎用动态编译”指的是在编程过程中对动态编译这一技术的谨慎态度。动态编译是程序运行时根据需要将源代码编译为可执行代码的过程,与静态编译(编译时一次性完成)形成对比。在Java中,JIT(Just-In-Time)...
玩客云 灯光控制 容易烧主板 慎用
标题“慎用ext.zip”可能指的是在编程或系统管理中,对使用特定扩展名如“ext.zip”可能带来的潜在问题的警示。虽然描述部分没有提供具体信息,但我们可以基于这个标题来探讨一下在处理zip文件,特别是那些带有“ext...
慎用抗生素 刻不容缓 (小品).docx
《易语言处理事件命令慎用时钟版源码解析》 易语言,作为一款由中国程序员设计的编程语言,以其简洁的语法和贴近自然语言的特点,为初学者提供了友好的编程环境。然而,对于任何编程语言而言,理解并合理使用各种...
初中语文文摘生活慎用何首乌治白发
易语言处理事件命令慎用线程版源码。@易语言源码分享站。
标题中的“冰冻精灵清除器慎用.rar”指的是一个针对名为“冰冻精灵”软件的清除工具的压缩文件。冰冻精灵,也被称为Deep Freeze,是一款知名的系统还原软件,主要用于维护计算机系统的稳定状态,一旦系统出现问题,...