精华内容
下载资源
问答
  • 2021-04-25 17:52:23

    标题where后面的条件执行先后顺序

    在mysql中where后面的条件是从左往右执行的(Oracle从右往左),所以把过滤数据量大的条件放左边先执行。

    更多相关内容
  • MySQL执行顺序

    千次阅读 2022-02-26 22:52:43
    mysql执行顺序

    mysql执行顺序如下:

    1. from 阶段

    2. where 阶段

    3. group by 阶段

    4. having 阶段

    5. select 阶段

    6. order by 阶段

    7. limit 阶段

     

    问题: 为什么别名不可以使用在where中,但可以使用在order by中?

    根据mysql的执行顺序,可以知道,上述代码先执行了from score ,再执行了where , 最后执行了select  。 别名产生在第五个查询阶段,别名有了之后,后面的执行阶段才能使用,也就是说,别名只能是第五阶段之后的查询才能使用。因此where total >= 200执行时,还未产生别名total,因此编译出错。

    展开全文
  • mysql语句的书写顺序和执行顺序有很大差异。 书写顺序mysql的一般书写顺写为: select <要返回的数据列> from <表名> <join> join on where group by <分组条件> having <分组后的筛选条件> ...
  • MySQL中where条件顺序对索引的影响

    千次阅读 2021-01-18 18:47:14
    看到有资料说,where条件顺序和索引的顺序不一致,会影响查询的效率,根据的逻辑是:where条件的运行是从右到左的,将选择性强的条件放到最右边,可以先过滤掉大部分的数据(而选择性不强的条件过滤后的结果集仍然...

    看到有资料说,where条件的顺序和索引的顺序不一致,会影响查询的效率,根据的逻辑是:

    where条件的运行是从右到左的,将选择性强的条件放到最右边,可以先过滤掉大部分的数据(而选择性不强的条件过滤后的结果集仍然很大),在根据其它条件过滤时,需要比较的数据量就少,提高查询的效率。

    当我看到这个逻辑时,自我认为不是太合理,数据库引擎在执行SQL语句时,都是要经过查询优化器的,查询优化器会将SQL进行优化,选择最优的查询计划来执行,查询优化器应该会选择最优的查询计划,如果仅仅是因为where字句的顺序不同,就不能选择最优的查询计划,那么查询优化器得有多么差劲啊...

    实践出真知

    实验条件:

    新建表test_condition,主键为id,还有两列表示姓名的name和年龄的age,数据量为10万条,年龄是18-45

    单列的辅助索引

    1. name列有索引

    EXPLAIN

    SELECT id,name,age from test_condition where name='test99500' and age=30

    查询计划为

    EXPLAIN

    SELECT id,name,age from test_condition where age=30 and name='test99500'

    查询计划为

    a4c26d1e5885305701be709a3d33442f.png

    从两者的查询计划上来看,两个没有什么区别。

    2. name列有索引,age列有索引

    EXPLAIN

    SELECT id,name,age from test_condition where name='test99500' and age=30

    查询计划

    a4c26d1e5885305701be709a3d33442f.png

    EXPLAIN

    SELECT id,name,age from test_condition where age=30 and name='test99500'

    查询计划

    a4c26d1e5885305701be709a3d33442f.png

    同样没有区别

    多列的联合索引

    联合索引

    表的索引:

    a4c26d1e5885305701be709a3d33442f.png

    1. 联合索引的列都使用

    EXPLAIN SELECT * from test_condition where `name`='test100' and age = 30

    查询计划:

    a4c26d1e5885305701be709a3d33442f.png

    EXPLAIN SELECT * from test_condition where age = 30 and `name`='test100'

    查询计划:

    a4c26d1e5885305701be709a3d33442f.png

    结论: 当联合索引的列都出现在查询条件中时,查询条件的顺序不影响。

    2. 仅使用联合索引中的一列

    EXPLAIN SELECT * from test_condition where `name`='test100'

    查询计划:

    a4c26d1e5885305701be709a3d33442f.png

    EXPLAIN SELECT * from test_condition where age = 30

    查询计划:

    a4c26d1e5885305701be709a3d33442f.png

    修改表结构,增加dept列

    EXPLAIN SELECT * from test_condition where `name`='test100'

    查询计划:

    a4c26d1e5885305701be709a3d33442f.png

    EXPLAIN SELECT * from test_condition where age = 30

    查询计划:

    a4c26d1e5885305701be709a3d33442f.png

    在表只有id,name,age时,查询时仍然会用到索引,应该是因为使用到了覆盖索引(查询结果列在索引中都存在)。

    当修改完表结构后,可以明确地看出,name条件查询用到了联合索引;而age查询时,使用不到联合索引。

    结论:MySQL遵循最左前缀原理,当查询条件匹配联合索引的前面几列时,可以使用联合索引;否则,不会使用联合索引。如果where字句中的列全都包含在索引列中,那么where字句中的字段顺序和索引顺序无关,但如果是部分包括的话就要看是否满足最左前缀匹配原则了。

    以上结果均是本人一次测试的结果,仅供参考,如有不对,欢迎指正。

    展开全文
  • mysql中查询条件的先后顺序问题?

    千次阅读 2021-01-19 11:10:51
    听一个讲座,说查询条件顺序影响查询速度,比如一个先运行一个高门槛的条件,后低门槛,运行速度会相对快,请问有这种事么?那么我在写thinkphp的查询语句的时候,是不是应该把高门槛的放在前面查询?数据库没这么...

    听一个讲座,说查询条件的顺序影响查询速度,比如一个先运行一个高门槛的条件,后低门槛,运行速度会相对快,请问有这种事么?

    那么我在写thinkphp的查询语句的时候,是不是应该把高门槛的放在前面查询?

    数据库没这么笨的。

    例如这个表:

    CREATE TABLE `user_customer` (

    `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID号',

    `uid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '人员ID号',

    `cid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '客户ID号',

    PRIMARY KEY (`id`),

    KEY `uid_cid` (`uid`,`cid`)

    ) ENGINE=InnoDB AUTO_INCREMENT=18227 DEFAULT CHARSET=utf8

    假设共有1千万条数据,uid > 1500的有40万条,cid > 1000000的有100万条,那么下面两个SQL那个快?

    select count(1) from user_customer where uid > 1500 and cid > 1000000;

    select count(1) from user_customer where cid > 1000000 and uid > 1500;

    是一样快的,因为数据库知道有uid_cid这个索引,会调整成先筛uid再筛cid的。

    当然,建不同的索引会有不同的效率,但是索引定了,查询条件的顺序是没影响的,例如组合索引的顺序改成

    cid,uid

    ,那样查询效率是不同的。

    在数据库优化方面,经常有一些似是而非的说法。

    查询条件顺序对性能的影响,按照我的了解,很早之前oracle 7及之前版本的时候,数据库的优化器确定执行计划的时候,是按照RBO的模式,可能对条件语句的顺序有要求(注意也仅仅是可能)。现在的数据库,数据库将查询语句做表达式分解后,会自行判断哪种方式效率最高,单表查询主要是判断全表扫描、索引或使用哪个索引,就所谓的CBO模式,这时候和查询条件的顺序就完全没有关系了。

    另外,判断一个说法是否正确最好的做法是自己动手测试,通过查看执行计划和响应时间,oracle的话可以根据物理读、逻辑读、Cost大小等,很容易判断出真伪。

    我去,这是哪的讲座啊, 执行一条sql语句就是发送一条申请,然后服务器返回数据,查询的时候 条件多少和是字段的设置比如*和字段名有关,然后在从数据库中发出来 个人觉得 并无影响 你要是想快可以用memcache 或者redis做缓存 内存肯定比机械快啊 ,主要还是你先优化好你的sql吧,最后可以做一下更高级的,集群啊

    可以查看数据库查询实现的过程。提交查询语句之后,数据库查询解析器会对查询语句进行处理,合并相同的条件,去掉没用的条件,通过查询优化器选择最优的查询方式。所以,查询条件的前后顺序没有多大影响

    展开全文
  • mysql的书写顺序与执行顺序

    千次阅读 2021-11-14 17:30:28
    1.书写顺序 select * | 列名 -- 查询的列 from 表名 --查询哪些表 where 条件 --剔除不符合条件的 group by 分组的列 --指定根据哪些列分组 having 条件 --对分组之后的数据进行操作 order by --排序的列 limit a,b ...
  • mysql条件索引

    2018-02-23 14:50:59
    如果查询语句使用索引(通常是where条件匹配索引)就会利用树的结构加快查找,索引会按值查找到要查找的行在表中位置,不需回表查询数据的就是聚簇索引(索引和数据存放在一起)。通常是需要回表再查数据,需要消耗...
  • 看到有资料说,where条件顺序会影响查询的效率,根据的逻辑是:where条件的运行是从右到左的,将选择性强的条件放到最右边,可以先过滤掉大部分的数据(而选择性不强的条件过滤后的结果集仍然很大),在根据其它条件...
  • SELECT * FROM USER WHERE user_id IN (1, 5, 8, 12, 9) ORDER BY FIELD(user_id, 1, 5, 8, 12, 9) ;
  • 如下所示: from 表 where 条件 group by 字段 形成虚拟的表及字段,聚合及字段添加 having 筛选数据 distinct 去重 order by 字段 asc,desc limit 限制条数 ...补充知识:mysql where条件and的执行顺序从左到
  • 导语 今天在写 SQL 的时候,遇到一个问题...首先先说明一个概念,MySQL 语句执行的顺序,并不是按照 SQL 语句的顺序。下面是示例 SQL SELECT DISTINCT < select_list > FROM < left> JOIN < right_table
  • oracle&mysql中where条件执行顺序

    千次阅读 2020-04-18 10:59:37
    mysql中where条件执行顺序 1.ORACLE中where部分条件执行顺序 oracle SQL的语法分析应该是从右到左的 如: -语句1 Select 'ok' From Dual Where 1 / 0 = 1 And 1 = 2; --语句2 Select 'ok' From Dual Where 1 =...
  • 面试的时候你可能遇到过面试官提出:SQL的书写顺序,SQL的执行(解析)顺序,WHERE条件执行顺序等问题。这篇文章就简要总结下上面的几个问题。 一、MySQL中SQL的书写顺序和执行顺序 sql编写顺序: select distinct…...
  • MySQL条件查询

    千次阅读 2022-03-15 13:32:39
    我们知道从 MySQL 表中使用 SELECT 语句来查询数据,如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。 SELECT 字段名 FROM 表名 WHERE 条件; 还有个运算符表: 运算符表 关系运算符 ...
  • 最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,...
  • 有资料说,where条件顺序会影响查询的效率,根据的逻辑是: where条件的运行是从右到左的,将选择性强的条件放到最右边,可以先过滤掉大部分 的数据(而选择性不强的条件过滤后的结果集仍然很大),在根据其它条件...
  • MySQL 各语句执行顺序

    千次阅读 2022-01-10 11:14:42
    语句中各子句完整执行顺序概括(按照顺序号执行): 每个子句执行顺序分析 语句中各子句完整执行顺序概括(按照顺序号执行): from (注:这里也包括from中的子语句) join on where group by(开始使用select中...
  • 本文实例讲述了mysql代码执行结构。分享给大家供大家参考,具体如下: ... 分支结构的执行是依据一定的条件选择执行路径,它会依据我们给定的条件来选择执行那些sql语句 mysql中分支结构只有if-else: 语法:
  • 如下sql,我们可能会理所当然的以为输出的...如果想要进行按传入条件顺序输出的话,可以使用order by (field, data...) , 如上转化出来应如下: select * from table where id in (5,9,3) order by (id,5,9,3) 输出就会
  • MySql执行顺序及执行计划

    万次阅读 多人点赞 2019-03-06 12:41:12
    一、mySql的执行顺序 mysql执行sql的顺序从 From 开始,以下是执行的顺序流程 1、FROM table1 left join table2 on 将table1和table2中的数据产生笛卡尔积,生成Temp1 2、JOINtable2 所以先是确定表,再确定关联...
  • Mysql Where条件执行顺序是从左到右

    万次阅读 2018-01-18 10:53:56
    where执行顺序是从左往右执行的,遵守原则:排除越多数据的条件放在第一个。
  • mysql中的查询语句的执行顺序

    千次阅读 2021-03-10 19:40:49
    一、sql语句的执行顺序 1.sql语句的执行顺序 (7)select (8)distinct 字段名1,字段名2... (5)[fun 字段名] (1)from 表名 (2)inner|left|right|full|cross join on 连接条件 (3)where 筛选条件 (4)group by 分组条件...
  • Mysql执行顺序

    千次阅读 2019-06-10 23:20:56
    一、mySql的执行顺序 mysql执行sql的顺序从 From 开始,以下是执行的顺序流程 开始->FROM子句->WHERE子句->GROUP BY子句->HAVING子句->ORDER BY子句->SELECT子句->LIMIT子句->最终结果 1、...
  • 而对驱动表的选择,from后的表顺序并不起决定作用,mysql会根据多重因素选择最优的链接顺序。如果想自行控制链接顺序可以通过Optimizer Hints(mysql 8.0)指定。使用saklia数据库1.先通过一个left join的例子说明f...
  • 有时候我们需要按照in条件里的id顺序输出结果,可sql语句在不加order by的时候是按照asc排序的,下边的sql解决按照in条件顺序的id输出查询结果mysql写法:eg1:SELECT * FROM EVENT WHERE eventId IN(443,419,431,...
  • )数组内的指定字段值顺序可一样,可不一样,最终是按照field(?)数组内的指定字段值顺序进行排序的 使用示例: select id, name, age, sex from user where name in ('user1', 'user2', 'user3') ord...
  • mysql join的执行顺序??

    千次阅读 2021-01-30 02:16:17
    例1(left join && right join):select * from A ...// 最终返回的是 C 表中的数据,附带A、B两表中符合条件的数据// 这边的执行顺序是怎样的?// 我的理解:1. A left join B 返回 A 表数据,附带 B 表中...
  • MySQL条件查询

    千次阅读 2022-01-04 22:41:02
    msyql 条件查询详细
  • MySQL - ON & WHERE 条件区别和执行顺序

    千次阅读 2018-10-30 15:18:34
    1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。 2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录).....
  • sql语句 where 后条件执行先后顺序

    千次阅读 2021-01-19 07:02:22
    针对mysql,其条件执行顺序是 从左往右,自上而下针对SQL server、orcale,其条件执行顺序是从右往左,自下而上1.mysqlwhere执行顺序是从左往右执行的,在数据量小的时候不用考虑,但数据量多的时候要考虑条件的先后...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 180,112
精华内容 72,044
关键字:

mysql条件顺序

mysql 订阅