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

那么我在写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查询时条件的顺序_mysql中查询条件的先后顺序问题?相关推荐

  1. mysql查询班级作业提交情况_MySQL中查询获取每个班级成绩前三名的学生信息

    标签: 今天有同事说到了怎么MySQL中查询获取每个班级成绩前三名的学生信息,在网上查了查,然后写出代码,很快就OK了. CREATE TABLE t_testscore(    pk_id INT ...

  2. mysql将时间戳转换成日期_mysql 中查询时如何将时间戳转换为日期格式 / 日期格式转换为时间戳...

    在数据库的使用中,经常需要按指定日期来查询记录,以便于统计,而在数据库中,有很多存储的是时间戳, 也有的直接存日期,查询的时候可能不是那么好弄. mysql提供了两个函数: from_unixtime ...

  3. mysql查找有小数点的数据_MySQL中查询中位数?

    导读:计算中位数可能是小学的内容,然而在数据库查询中实现却并不是一件容易的事.我们今天就来看看都有哪些方法可以实现. 注:本文所用MySQL版本无限制,所列题目均来源于LeetCode. LeetCo ...

  4. 当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式

    当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式. 比如 select * from T_Employee where FNumber not in ( select top 5* ...

  5. mysql 判断 字母大写_MySQL中查询时对字母大小写的区分

    我相信很多人在mysql中查询时都遇到过mysql不区分字母大小写的情况:如以下例子: 1.SELECT * FROM `user` WHERE userpass = 'Z20'; 结果为: 2.SE ...

  6. mysql 查找小写字母_MySQL中查询时对字母大小写的区分

    我相信很多人在mysql中查询时都遇到过mysql不区分字母大小写的情况:如以下例子: 1.SELECT * FROM `user` WHERE userpass = 'Z20'; 结果为: 2.SE ...

  7. MySQL倒序查询最后三条语句_MySQL 中 一条 order by index limit 语句的分析

    在开发过程中,遇到了一条 order by index limit 的语句,执行时间慢,下面记录一下分析过程和原因 问题 SQL select * from t1 where call_type = ...

  8. mysql查询动态表名的数据类型_Mysql中查询某个数据库中所有表的字段信息

    前言 有时候,需要在数据库中查询一些字段的具体信息,而这些字段又存在于不同的表中,那么我们如何来查询呢? 在每一个数据库链接的information_schema数据库中,存在这样一张表--COLUM ...

  9. mysql的limit有什么缺陷_mysql中使用limit时,explain带来的问题分析

    问题分析: 1,explain当估计行数时,不考虑limit,因此可能会对查询估计过多的检查行数. 2,类似于SELECT ... FROM TBL LIMIT N这样的全表扫描的查询因为用不到索引将 ...

最新文章

  1. c语言:输入两个正整数m和n,求其最大公约数和最小公倍数
  2. jenkins slave在master显示和运行问题
  3. jquery、js父子页面操作总结
  4. Git账号登录sonarqube 报错:没有权限 请联系管理员
  5. 用Java语言,写一个植物大战僵尸简易版!
  6. js获取最近几天的日期(转载)
  7. C# 图片画矩形,添加文字
  8. net.sf.ezmorph.Morpher问题解决
  9. 实测 | 英伟达A100深度学习性能:训练速度高达V100的3.5倍!
  10. 正则基础之——非捕获组
  11. 如何从零设计一款牛逼的高并发架构(建议收藏)
  12. elementui树状菜单tree_Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)...
  13. [第5天]nginx环境下404问题
  14. WCF开发之消息契约(MessageContract)
  15. vsco怎么两个滤镜叠加_做图比设计师还快?!这帮饭圈女孩是怎么做到的?
  16. 令狐冲和TCP/IP协议的第三层协议的关系(经典)
  17. 基于HTML5+CSS3的网页设计与实现
  18. 使用C语言编写三子棋小游戏
  19. vc 打开文件对话框获取选择文件路径
  20. 【max32660】简易智能手表说明文档

热门文章

  1. C语言中单引号 39 97 39,C語言程序设计实验指导书.doc
  2. unity 植物大战僵尸怎么做
  3. numpy的快速傅里叶变换
  4. 诺基亚7 android 9,诺基亚7 Plus喜迎Android 9更新:带来众多更新
  5. 一文带你区分常用的手机电脑接口:USB、Type-C、雷电、HDMI、VGA、DVI等
  6. corners设置多个属性
  7. 机器学习笔记(3)---K-近邻算法(1)---约会对象魅力程度分类
  8. python 读取excel一列的内容根据内容循环生成宏定义
  9. 什么是 Deno,它与 Node.js 有何不同?
  10. RabbitMQ------发布确认(单个确认、批量确认、未确认)(四)