MySQL 数据库中对子查询的限制
日期:2007年10月1日 作者: 查看:[大字体 中字体 小字体]-
更正的一致缺陷:如果将NULL值与使用ALL、ANY或SOME的子查询进行比较,而且子查询返回空结果,比较操作将对NULL的非标准结果进行评估,而不是TRUE或FALSE。
子查询的外部语句可以是SELECT、INSERT、UPDATE、DELETE、SET或DO中的任何一个。
仅部分支持行比较操作:
·对于expr IN (subquery),expr可以是n-tuple(通过行构造程序语法指定),而且子查询能返回n-tuples个行。
·对于expr op {ALLANYSOME} (subquery),expr必须是标度值,子查询必须是列子查询,不能返回多列行。
换句话讲,对于返回n-tuples行的子查询,支持:
(val_1, ..., val_n) IN (subquery)
但不支持:
(val_1, ..., val_n) op {ALLANYSOME} (subquery)
支持针对IN的行比较,但不支持针对其他的行比较,原因在于,IN实施是通过将其重新编写为“=”比较和AND操作的序列完成的。该方法不能用于ALL、ANY或SOME。
未良好优化行构造程序。下面的两个表达式是等效的,但只有第2个表达式能被优化:
(col1, col2, ...) = (val1, val2, ...)
col1 = val1 AND col2 = val2 AND ...对于IN的子查询优化不如对“=”的优化那样有效。
对于不良IN性能的一种典型情况是,当子查询返回少量行,但外部查询返回将与子查询结果相比较的大量行。
FROM子句中的子查询不能与子查询有关系。在评估外部查询之前,将对它们进行具体化处理(执行以生成结果集),因此,不能按照外部查询的行对它们进行评估。
一般而言,不能更改表,并从子查询内的相同表进行选择。例如,该限制适用于具有下述形式的语句:
DELETE FROM t WHERE ... (SELECT ... FROM t ...);
UPDATE t ... WHERE col = (SELECT ... FROM t ...);
{INSERTREPLACE} INTO t (SELECT ... FROM t ...);例外:如果为FROM子句中更改的表使用子查询,前述禁令将不再适用。例如:
UPDATE t ... WHERE col =
(SELECT (SELECT ... FROM t...) AS _t ...);禁令在此不适用,这是因为FROM中的子查询已被具体化为临时表,因此“t”中的相关行已在满足“t”条件的情况下、在更新时被选中。
与子查询相比,针对联合的优化程序更成熟,因此,在很多情况下,如果将其改写为join(联合),使用子查询的语句能够更有效地执行。
但下述情形例外:IN子查询可被改写为SELECT DISTINCT联合。例如:
SELECT col FROM t1 WHERE id_col IN
(SELECT id_col2 FROM t2 WHERE condition);可将该语句改写为:
SELECT DISTINCT col FROM t1,
t2 WHERE t1.id_col = t2.id_col AND condition;但在该情况下,联合需要额外的DISTINCT操作,而且与子查询相比,效率并不高。
可能的未来优化:MySQL不改写针对子查询评估的联合顺序。在某些情况下,如果MySQL将其改写为联合,能够更有效地执行子查询。这样,优化程序就能在更多的执行方案间进行选择。例如,它能决定是否首先读取某一表或其他。
例如:
SELECT a FROM outer_table AS ot
- [1] [2] 下一页
-
- MySQL 数据库中对子查询的限制 相关文章:
- ·学习CSS制作网页的多个经验技巧
- ·Fireworks教程 液体金属表面特效制作
- ·Fireworks教程:立体质感水晶的制作过程
- ·个性圣诞节贺卡制作网站推荐
- ·非主流ps教程:制作红绿色调效果
- ·多个CSS样式表争夺特定选择符的控制权
- ·学习CSS制作网页总结的一些经验技巧
- ·纯CSS制作的新闻网站中的文章列表
- ·Illustrator绘制精美三维图表实例
- ·Photoshop初学者轻松制作条形码
- MySQL 数据库中对子查询的限制 相关软件
- ·天狼星语音控制QQ幻想
- ·天狼星语音控制魔兽
- ·天狼星语音控制大话西游
- ·《反恐精英》著名的贴图包制作工具下载
- ·《冰封王座》:暴雪体育地图制作比赛前三名地图
- ·团队制作:官场现形记《傅二棒槌》
- ·中国第一颗原子弹制造纪实:596秘史
- ·PSP自制系统IRSHELL最新3.62版
- ·潘多拉神奇电池记忆棒制作必要程序
- ·原创推理悬疑巨制《面具馆》
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
下一篇:Windows环境下的Tomcat + Apache配置
精品推荐
热点TOP10
- ·MySQL数据库学习手册之从MySQL得到最大的性能
- ·mysql中的mysql_real_connect连接参数设置
- ·详细介绍优化mysql性能的十个参数
- ·讲解Ubuntu下MySQL数据库安装后初步设置
- ·修改MYSQL数据库,数据表,字段的编码(解决JSP乱码)
- ·怎样测试 MySQL安装是否成功?
- ·MySQL中LOAD DATA LOCAL安全问题
- ·Mysql的distinct语句和group by,order by
- ·一个简单的MySQL备份恢复数据指令
- ·SQL中HAVING从句的用法
- ·让Windows在IIS支持PHP和MySQL
- ·快速掌握 MySQL数据库中触发器的应用
- ·数据从MySQL迁移到 Oracle的注意事项
- ·MySQL管理工具SQLyog最新6.1下载
- ·mysql导入数据库文件最大限制的修改方法
- ·SQL Server 2008 几项新特性概述
- ·MySQL安装的故障诊断与排除(Windows环境)
- ·快速掌握 SQL Server 的任务调度
- ·PHP5对Mysql5的任意数据库表的管理代码示例
- ·怎样从Windows命令行启动MySQL?
特别推荐
- ·修改MySQL的默认密码
- ·初学MYSQL应知道:Mysql参数优化
- ·数据库安全应用 使用MySQL的23个注意事项
- ·入门:MYSQL基础
- ·轻松描述Windows上安装多个Mysql的步骤
- ·安装与卸载MySQL数据库系统服务的常见问题
- ·Mysql 安全注意事项
- ·初学MySql5 所应了解的知识和常见问题
- ·MySQL数据库学习手册之安装MySQL
- ·无法远程登入MySQL数据库的三种解决办法
- ·讲解Ubuntu下MySQL数据库安装后初步设置
- ·MySQL数据库管理员迅速回答常见问题汇总
- ·详细介绍优化mysql性能的十个参数
- ·MySQL中执行SQL语句时的两个注意点
- ·帮助你如何迅速优化你MySQL数据库性能
- ·PHP+MYSQL建设网站程序需要注意两点
- ·资深专家手把手教你安装MYSQL数据库
- ·实战经验:PHP+MySQL数据库论坛简易通
- ·MySQL的启动方法(windows 平台)
- ·修改MYSQL数据库,数据表,字段的编码(解决JSP乱码)
