84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
听一个讲座,说查询条件的顺序影响查询速度,比如一个先运行一个高门槛的条件,后低门槛,运行速度会相对快,请问有这种事么?那么我在写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,那样查询效率是不同的。
cid,uid
在数据库优化方面,经常有一些似是而非的说法。
查询条件顺序对性能的影响,按照我的了解,很早之前oracle 7及之前版本的时候,数据库的优化器确定执行计划的时候,是按照RBO的模式,可能对条件语句的顺序有要求(注意也仅仅是可能)。现在的数据库,数据库将查询语句做表达式分解后,会自行判断哪种方式效率最高,单表查询主要是判断全表扫描、索引或使用哪个索引,就所谓的CBO模式,这时候和查询条件的顺序就完全没有关系了。
另外,判断一个说法是否正确最好的做法是自己动手测试,通过查看执行计划和响应时间,oracle的话可以根据物理读、逻辑读、Cost大小等,很容易判断出真伪。
我去,这是哪的讲座啊, 执行一条sql语句就是发送一条申请,然后服务器返回数据,查询的时候 条件多少和是字段的设置比如*和字段名有关,然后在从数据库中发出来 个人觉得 并无影响 你要是想快可以用memcache 或者redis做缓存 内存肯定比机械快啊 ,主要还是你先优化好你的sql吧,最后可以做一下更高级的,集群啊
可以查看数据库查询实现的过程。提交查询语句之后,数据库查询解析器会对查询语句进行处理,合并相同的条件,去掉没用的条件,通过查询优化器选择最优的查询方式。所以,查询条件的前后顺序没有多大影响
数据库没这么笨的。
例如这个表:
假设共有1千万条数据,uid > 1500的有40万条,cid > 1000000的有100万条,那么下面两个SQL那个快?
是一样快的,因为数据库知道有uid_cid这个索引,会调整成先筛uid再筛cid的。
当然,建不同的索引会有不同的效率,但是索引定了,查询条件的顺序是没影响的,例如组合索引的顺序改成
cid,uid
,那样查询效率是不同的。在数据库优化方面,经常有一些似是而非的说法。
查询条件顺序对性能的影响,按照我的了解,很早之前oracle 7及之前版本的时候,数据库的优化器确定执行计划的时候,是按照RBO的模式,可能对条件语句的顺序有要求(注意也仅仅是可能)。现在的数据库,数据库将查询语句做表达式分解后,会自行判断哪种方式效率最高,单表查询主要是判断全表扫描、索引或使用哪个索引,就所谓的CBO模式,这时候和查询条件的顺序就完全没有关系了。
另外,判断一个说法是否正确最好的做法是自己动手测试,通过查看执行计划和响应时间,oracle的话可以根据物理读、逻辑读、Cost大小等,很容易判断出真伪。
我去,这是哪的讲座啊, 执行一条sql语句就是发送一条申请,然后服务器返回数据,查询的时候 条件多少和是字段的设置比如*和字段名有关,然后在从数据库中发出来 个人觉得 并无影响 你要是想快可以用memcache 或者redis做缓存 内存肯定比机械快啊 ,主要还是你先优化好你的sql吧,最后可以做一下更高级的,集群啊
可以查看数据库查询实现的过程。提交查询语句之后,数据库查询解析器会对查询语句进行处理,合并相同的条件,去掉没用的条件,通过查询优化器选择最优的查询方式。所以,查询条件的前后顺序没有多大影响