原文:mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录,需要的朋友可以参考下。 NOT IN、JOIN、IS NULL、NOT EXISTS效率对比 语句一:select count(*) from A where A.a not in (select a from B) 语句二:select count(*) from A left join B on A.a = B.a where B.a is null 语句三:select count(*) from A where not exists (select a from B where A.a...
执行语句如下:select count(DISTINCT l1) from t1 where l1 in(select l2 from t2 where l3=‘xxx‘) 感觉速度很慢(几十秒),但是单独执行子查询select l2 from t2 where l3=‘xxx‘或者去掉子查询这个直接执行select count(DISTINCT l1) from t1都比较快。将语句改成join的形式效果就快很多(毫秒级别),修改后语句如下:select count(DISTINCT l1) from t1 inner join t2 where t1.l1=t2.l2 and t2.l3=‘xxx‘。具体原因分析...
问题是这样:数据库中一个字段cate的数据是以逗号分隔存储的,如:1,2,3,4,5,查询时传入的参数是一个数组,如:array(1,2);我这比较笨的方法是循环这个数组,然后用like拼接起来实现的,如: (cate like '%1,%' or cate like '%2,%') 但在数据量很大的时候这个效率就太低了,有没更有效的办法呢?谢谢。。回复内容:问题是这样:数据库中一个字段cate的数据是以逗号分隔存储的,如:1,2,3,4,5,查询时传入的参数是一个数组,如:arr...
我有几个相同结构的表,需要进行联表查询,我使用如下的语句 select sum(cnt) from (select count(*) as cnt from t1 where a>100 union all select ...) as t; 这一句拿总和的挺快。 select * from t1 where a>100 union all select * from t2 where a>100 union all select * from t3 where a>100 order by b desc limit 0,10000; 这一句效率好像很低,等了很久才出来结果。 应该如何优化,谢谢 回复讨...
我想做一个系统 文章这样的需要进行排序操作的内容使用mysql 但是针对分类表这样的数据层,我想存储到文本,这样就可以跳过缓存,有效减少数据库查询次数我对这个想法有点犹豫,请高手们指教!!回复内容:我想做一个系统 文章这样的需要进行排序操作的内容使用mysql 但是针对分类表这样的数据层,我想存储到文本,这样就可以跳过缓存,有效减少数据库查询次数我对这个想法有点犹豫,请高手们指教!!没太明白你 调过缓存 的意思。...
如题,从我目前所见所知都是不要再sql语句中使用mysql自带的函数而去使用PHP中的函数,但是个人内心一直对这种说法不太信服,如果是这样 那么mysql自带函数存在的意义是什么呢?回复内容:如题,从我目前所见所知都是不要再sql语句中使用mysql自带的函数而去使用PHP中的函数,但是个人内心一直对这种说法不太信服,如果是这样 那么mysql自带函数存在的意义是什么呢?用mysql自带函数有什么不好? 1.很可能造成where后的条件无法走索引 2.把...
UPDATE table SET field = '123' WHERE id = '1' LIMIT 1;我的疑问是 WHERE id = 1 这个问题,id这个字段是int型的,但是sql里我给的是字符型。这样会影响效率? 希望有个例子能说明下。 回复内容:UPDATE table SET field = '123' WHERE id = '1' LIMIT 1;我的疑问是 WHERE id = 1 这个问题,id这个字段是int型的,但是sql里我给的是字符型。这样会影响效率? 希望有个例子能说明下。没有区别.补一句:如果id是主键,会随主键的创...
我想问下select的时候field为*和指定$field的时候效率对比大概是什么样的?例如 我要查的表有10列 我实际需要里面8列的信息 那么 field * 和 field 指定 8列的效率相差大吗?回复内容:我想问下select的时候field为*和指定$field的时候效率对比大概是什么样的?例如 我要查的表有10列 我实际需要里面8列的信息 那么 field * 和 field 指定 8列的效率相差大吗?数据库的优化,select你所需要的字段,别看差不多,等到你数...
在老版本的MySQL 3.22中,MySQL的单表限大小为4GB,当时的MySQL的存储引擎还是ISAM存储引擎。但是,当出现MyISAM存储引擎之后,也就是从MySQL 3.23开始,MySQL单表最大限制就已经扩大到了64PB了(官方文档显示)。也就是说,从目前的技术环境来看,MySQL数据库的MyISAM存储 引擎单表大小限制已经不是有MySQL数据库本身来决定,而是由所在主机的OS上面的文件系统来决定了。而MySQL另外一个最流行的存储引擎之一Innodb存储数据的策略...
mysqlphpmssqlcakephp 直接上代码: $sql = "select mrn from A where type=2"; //mysql数据库 $result = $dbFin->query($sql); while ($row = $result->fetch_assoc()) { $sqlPid = "select name from TestDB.dbo.B where pid= {$row[mrn]}"; //sql server 数据库 $rs = mssql_query($sqlPid,$dbClin); if($rs && mssql_num_rows($rs)) { ...
但是真正测试一下才发现这样效率非常低。一个15万余条的库,查询5条数据,居然要8秒以上。查看官方手册,也说rand()放在ORDER BY 子句中会被执行多次,自然效率及很低。You cannot use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times.搜索Google,网上基本上都是查询max(id) * rand()来随机获取数据。 SELECT * FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * ...
代码如下:select add_tb.RUID from (select distinct RUID from UserMsg where SubjectID =12 and CreateTime>‘2009-8-14 15:30:00‘ and CreateTime<=‘2009-8-17 16:00:00‘ ) add_tb where add_tb.RUID not in (select distinct RUID from UserMsg where SubjectID =12 and CreateTime<‘2009-8-14 15:30:00‘ ) 返回444行记录用时 0.07sec explain 结果 +----+--------------------+------------+----------------+---------...
代码如下:select add_tb.RUID from (select distinct RUID from UserMsg where SubjectID =12 and CreateTime>‘2009-8-14 15:30:00‘ and CreateTime<=‘2009-8-17 16:00:00‘ ) add_tb where add_tb.RUID not in (select distinct RUID from UserMsg where SubjectID =12 and CreateTime<‘2009-8-14 15:30:00‘ ) 返回444行记录用时 0.07sec explain 结果 +----+--------------------+------------+----------------+---------...
本文详细解说了MySQL Order By Rand()效率优化的方案,并给出了优化的思路过程,是篇不可多得的MySQL Order By Rand()效率美文。 最近由于需要大概研究了一下MYSQL的随机抽取实现方法。举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1。 但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND...
分三中情况进行测试,分别是:第一种情况:in和or所在列为主键的情形。第二种情况:in和or所在列创建有索引的情形。第二种情况:in和or所在列没有索引的情形。每种情况又采用不同的in和or的数量进行测试。由于测试语句的数据量有4种情况,我这里就称为A组、B组、C组、D组,其中A组为3个值,B组为150个值,C组为300个值,D组为1000个测试结果如下:第一种情况,ID列为主键的情况,4组测试执行计划一样,执行的时间也基本没有区别。A组...