mysql 查询重复的数据的SQL优化方案

 在mysql中查询不区分大小写重复的数据,往往会用到子查询,并在子查询中使用upper函数来将条件转化为大写。如:

 

代码如下:

select * from staticcatalogue WHERE UPPER(Source) IN (SELECT UPPER(Source) FROM staticcatalogue GROUP BY UPPER(Source) having count(UPPER(Source))>1) ORDER BY upper(Source) DESC;

 

这条语句的执行效率是非常低的,特别是Source字段没有加索引。尤其是最忌讳的在查询条件中使用了函数,这将极大的降低查询速度,如果查询十万条数据以内的10分钟内还能获取到数据,如果是查询几十万条的话,会直接把服务器跑死的,此时可以通过一个临时表,并且加索引,再查询。这样可以提高很多的速度

 

代码如下:

CREATE TABLE staticcatalogue_tmp SELECT UPPER(Source) AS Source FROM staticcatalogue GROUP BY UPPER(Source) having count(UPPER(Source))>1;
ALTER TABLE staticcatalogue_tmp add INDEX TX_1 (Source);
select s.* from staticcatalogue s WHERE UPPER(s.Source) IN (SELECT st.Source FROM staticcatalogue_tmp st) ORDER BY UPPER(s.Source) DESC ;

 

以上就是本文sql优化方案的全部内容了,希望大家能够喜欢。

时间: 2024-10-26 05:48:10

mysql 查询重复的数据的SQL优化方案的相关文章

mysql 查询重复的数据的SQL优化方案_Mysql

在mysql中查询不区分大小写重复的数据,往往会用到子查询,并在子查询中使用upper函数来将条件转化为大写.如: 复制代码 代码如下: select * from staticcatalogue WHERE UPPER(Source) IN (SELECT UPPER(Source) FROM staticcatalogue GROUP BY UPPER(Source) having count(UPPER(Source))>1) ORDER BY upper(Source) DESC; 这条

Mysql删除重复的数据 Mysql数据去重复_Mysql

MySQL数据库中查询重复数据 select * from employee group by emp_name having count (*)>1; Mysql  查询可以删除的重复数据 select t1.* from employee t1 where (t1.emp_name) in (select t4.emp_name from (select t2.emp_name from employee t2 group by t2.emp_name having count(*)>1)

mysql查询当天所有数据sql语句

  mysql查询当天的所有信息: 代码如下 select * from test where year(regdate)=year(now()) and month(regdate)=month(now()) and day(regdate)=day(now()) 这个有一些繁琐,还有简单的写法: 代码如下 select * from table where date(regdate) = curdate(); 另一种写法没测试过 查询当天的记录 代码如下 select * from hb_a

mysql 查询指定日期时间内容sql查询语句

mysql教程 查询指定日期时间内容sql查询语句 在数据库教程设计时必须注意时间字段最好为int(4)这样,保存在数据库的时一个数字型日期时间截,我们可以用mktime函数求出当前日期的时间截进行加减就OK了,下面看实例 $time = time();   //一个月 $lastMonth = mktime(date('h'),date('i'),date('s'),date('m')-1,date('d'),date('y')); $where .= "  dtime < $lastM

MySQL查询重复记录sql语句

常用的语句 1.查找表中多余的重复记录,重复记录是根据单个字段(mail_id)来判断  代码如下 复制代码  SELECT * FROM table WHERE mail_id IN (SELECT mail_id FROM table GROUP BY mail_id HAVING COUNT(mail_id) > 1); 2.删除表中多余的重复记录,重复记录是根据单个字段(mail_id)来判断,只留有rowid最小的记录  代码如下 复制代码 DELETE FROM table WHER

MySQL 查询中的分页思路的优化

mysql|分页|优化 作者:steeven 似乎讨论分页的人很少,难道大家都沉迷于limit m,n?在有索引的情况下,limit m,n速度足够,可是在复杂条件搜索时,where somthing order by somefield+somefieldmysql会搜遍数据库,找出"所有"符合条件的记录,然后取出m,n条记录.如果你的数据量有几十万条,用户又搜索一些很通俗的词,然后要依次读最后几页重温旧梦...mysql该很悲壮的不停操作硬盘. 所以,可以试着让mysql也存储分页

MySQL 查询中的分页思路的优化教程

  复杂条件搜索时,where somthing order by somefield+somefieldmysql会搜遍数据库,找出"所有"符合条件的记录,然后取出m,n条记录.如果你的数据量有几十万条,用户又搜索一些很通俗的词,然后要依次读最后几页重温旧梦.mysql该很悲壮的不停操作硬盘. 所以,可以试着让mysql也存储分页,当然要程序配合. ASP的分页:在ASP系统中有Recordset对象来实现分页,但是大量数据放在内存中,而且不知道什么时候才失效(请ASP高手指点).

MySQL查询中的分页思路的优化

似乎讨论分页的人很少,难道大家都沉迷于limit m,n? 在有索引的情况下,limit m,n速度足够, 可是在复杂条件搜索时, where somthing order by somefield+somefield mysql会搜遍数据库,找 出"所有"符合条件的记录,然后取出m,n条记录. 如果你的数据量有几十万条,用户又搜索一些很通 俗的词, 然后要依次读最后几页重温旧梦...mysql该很悲壮的不停操作硬盘. 所以,可以试着 让mysql也存储分页,当然要程序配合. (这里只

oracle 根据树形结构查询一级,二级报表sql 优化问题

问题描述 问题是:当出现数据量特别大的时候,sql该如何优化,谢谢.select t.cate_1_id, max(t.supplier_count), max(t.supplier_t_count), max(t.supplier_a_count), max(t_rate), max(a_rate), max(t.vcode_count), max(vcode_rate), max(t.supplier_l_count), max(l_rate), max(t.supplier_b_count