MySQL子查询的优化

php中文网
发布: 2016-06-07 16:08:18
原创
1830人浏览过

一、MySQL子查询的位置当一个查询是另一个查询的子部分是,称之为子查询(查询语句中嵌套含有查询语句)。子查询也是使用频率比较高的一种查询类型。因此,优化

一、MySQL子查询的位置

       当一个查询是另一个查询的子部分是,,称之为子查询(查询语句中嵌套含有查询语句)。子查询也是使用频率比较高的一种查询类型。因此,优化子查询,对于整个系统的性能也有直接的影响。

       从查询出现在SQL语句的位置来看,它可以出现在目标列中,也可以出现在from子句中,还可以出现在JOIN/ON子句、GROUPBY子句、HAVING子句、ORDERBY子句等位置。下面依次来看这几种形式的子查询,以及对他们进行优化的一些想法。

 

1、子查询出现在目标列位置

       当子查询出现在目标列位置的时候,这种查询只能是标量子查询。也就是说子查询返回的结果只能是一个元组的一个属性。否则,数据库会返回错误信息。

       下面为了实验上面这段话,我们来新建一些表,并插入一些数据。

create table t1 (k1 int primary key, c1 int); create table t2 (k2 int primary key, c2 int); insert into t2 values (1, 10), (2, 2), (3,30);

SQL语句的结果为:

mysql> select t1.c1, (select t2.c2 from t2) from t1, t2; Empty set (0.00sec)

t1表中插入一些数据:

magento(麦进斗)
magento(麦进斗)

Magento是一套专业开源的PHP电子商务系统。Magento设计得非常灵活,具有模块化架构体系和丰富的功能。易于与第三方应用系统无缝集成。Magento开源网店系统的特点主要分以下几大类,网站管理促销和工具国际化支持SEO搜索引擎优化结账方式运输快递支付方式客户服务用户帐户目录管理目录浏览产品展示分析和报表Magento 1.6 主要包含以下新特性:•持久性购物 - 为不同的

magento(麦进斗) 0
查看详情 magento(麦进斗)
mysql> insert into t1 values (1, 1), (2, 2), (3, 3); Query OK, 3 rows affected (0.00 sec)

a中的查询,我们可以看到执行的结果        

mysql>select t1.c1, (select t2.c2 from t2) from t1, t2; ERROR 1241242(21000): Subquery returns more than 1 row

t2表,然后再执行a中所做的查询。

mysql>delete from t2; QueryOK, 3 rows affected (0.00 sec)   mysql> select t1.c1, (select t2.c2 from t2) from t1, t2; Empty set (0.00 sec)

   t2表中删除的数据在插入到t2表:

mysql>insert into t2 values (1, 10), (2, 2), (3, 30); Query OK,3 rows affected (0.00 sec)

然后执行如下查询:

mysql> select t1.c1, (select t2.c2 from t2 where k2=1) from t1, t2; +------+-----------------------------------+ | c1   | (select t2.c2 from t2 where k2=1) | +------+-----------------------------------+ |    1 |                                10 | |    2 |                                10 | |    3 |                                10 | |    1 |                                10 | |    2 |                                10 | |    3 |                                10 | |    1 |                                10 | |    2 |                                10 | |    3 |                                10 | +------+-----------------------------------+

我们可以清楚的看到MySQL为我们返回的结果。

f、我们对e中的查询再换一种写法,可以看到返回的结果为

mysql> select t1.c1, (selectt2.c2 from t2 where c2 > 1) from t1, t2; ERROR 1241242 (21000): Subqueryreturns more than 1 row
相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号