mysql count 优化问题 5C

使用jdbcTemplate,做统一的分页查询的时候,
count(*)在数据量大的时候,总数查询非常慢,
有什么好的解决方案,
count(1)和count(*)就不要说了
也建了适当的索引,
使用结果集的游标直接指向最后能有效果么?

0

5个回答

count(索引),你分页查询要count干嘛?

0
 count(id)
0

分页了,还要cont是为了显示总条数?

0

大概的一个解决方案:

在某个空闲时间。比如每天0点,统计你要分页的这个表的总数,保存到另外一个表的字段里面去,
在当天之后的时间里,每次新增、删除数据到这个表的时候,同步更新另外一个表里面的总数。

这样每次获取的时候可以直接获取。

0

首先count(主键)肯定比count(*)|count(1)快,count(*)|count(1)的效率没有太大差别,count(主键)效率明显高
其次:你的场景是数据量非常大,呢么,用户很少会翻到最后一页,所以,可以将总数缓存起来,比如缓存到redis,当用户翻到最后一页的时候,再执行count更新redis缓存总数.另外可以设置一个定时任务,比如每隔2个小时,进行一次自动更新缓存,当然,这个有呢个万一的可能性就是用户在读最后一页,这时候执行更新,而定时任务恰好也执行!但是因为数据量非常大,这个总数本就可以做为一个近似数,没有必要保证一定是多少,所以这个误差完全空可以忽略不计,在这样的前提下,呢么等于你每次分页只需要拿你某一页的数据去数据库查,而永远不需要进行count计算,效率肯定快,而你的count计算要么是定时任务更新,要么是用户触发最后一页.所以这样的情况下,效率会高很多

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Count(*) 语句的优化问题?
Select count(*) From Article where fenlei=6 and ArticleID<100000 and isHide=0rn说明:建立有 ArticleID ,fenlei 索引,isHide 的值只有0和1,没有索引。rnrn语句执行,结果值为2300,执行时间130毫秒,扫描Article 2次,逻辑读 13000次。rnrn而如果只执行rnSelect count(*) From Article where fenlei=6 and ArticleID<100000rn则结果还是2300,执行时间0毫秒,扫描Article 1次,逻辑读 29次。rnrn只是增加了一个isHide=0条件,系统消耗就差别如此大。rnrn请问这个语句,该怎么优化?
mysql 优化问题
如果我的一个SQL查询where条件有多个建索引该怎么建:select * from t_rlinfo where isClose = 'Open' and gds = '1P' and agent = '11' and branch = '1' and rl = '1' and source = '1' order by agent desc limit 0, 20rn
MySQL优化问题
目前公司的数据库最多能承受3600人同时访问,现在需要对数据库进行优化,希望可以承受5000用户量。rn尤其是用户登录时,访问数据量比较大,有可能会爆掉,请问针对这样的问题前辈门有什么好的建议吗?
mysql优化问题
[img=https://img-bbs.csdn.net/upload/201407/31/1406788654_376386.jpg][/img][img=https://img-bbs.csdn.net/upload/201407/31/1406788665_268510.jpg][/img][img=https://img-bbs.csdn.net/upload/201407/31/1406788675_827700.jpg][/img][img=https://img-bbs.csdn.net/upload/201407/31/1406788690_321372.jpg][/img]rnrn说明,在 表 i_base_specification 表中有14万条数据。如果关联查询不关联 表i_base_specification,查询时间是0.006s,如果关联表查询的话就要12.876s,找高手优化一下sql
mysql not in 的优化问题
一 、 现在有两张表rn user 表包括两个字段 id cardid a表cardid唯一主键rn score表 表 包括两字段 id carid score b表id 和cardid联合主键 rn二、学生通过考试后就取 user表的 cardid 插入到b表中rn现在当b表中有5 条记录时候即 通过考试了rn三、现在要去查询没通过考试的情况rnrnselect id,cardid form user where cardid not in(select cardid from socre)rn 这样查询可以但是 score表里数据非常大 也做索引优化了rn还是慢rn求大神 帮忙优化一下 rn
MYSQL IN 优化问题
SELECT id, classid, onclick, newspath, keyboard, userid, username, ztid, checked, istop, truetime, ismember, userfen, isgood, titlefont, titleurl, filename, groupid, plnum, firsttitle, isqf, totaldown, closepl, lastdotime, title, newstime, leixin, web, daxiao, xianshi, yeshurnFROM 123456rnWHERE classidrnIN ( 5, 6, 7, 8, 10, 11, 12, 13, 15, 17, 18, 19, 21, 22, 23, 24, 31, 32, 33, 34, 36, 37, 38, 39, 40, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 105, 106, 107, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123, 124, 125, 190 ) rnORDER BY id DESC rnLIMIT 0 , 62rnrn这个的执行时间是1.7SrnrnSELECT id, classid, onclick, newspath, keyboard, userid, username, ztid, checked, istop, truetime, ismember, userfen, isgood, titlefont, titleurl, filename, groupid, plnum, firsttitle, isqf, totaldown, closepl, lastdotime, title, newstime, leixin, web, daxiao, xianshi, yeshurnFROM 123456rnWHERE classidrnIN ( 5, 6, 7, 8, 10, 11, 12, 13, 15, 17, 18, 19, 21, 22, 23, 24, 31, 32, 33, 34, 36, 37, 38, 39, 40, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 105, 106, 107, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123, 124, 125, 190 ) rnLIMIT 0 , 62rnrn这个的执行时间是0.021Srnrn关键是第二个方法不能进行降序,而我又必须使用降序rnrn大家优化一下,我头都大了
MySQL的优化问题
**索引:** 提高城查询速度 提高排序速度: 假设磁盘上的数据没顺序,但是btree树是有规律的,沿着树来找是有序的,比如身高是没有序的,但是座位是有序的,按照座位来对身高排序 提高分组统计,先排序再分组也是会更快的 左前缀索引 分析语句的索引 explain 解析 + 语句 ,就能解析一个语句的信息,type:range 用了range索引 key_len:4 4个列都用上了(查询用的列...
MySQL 优化问题 ?
table_1有10万条记录rn索引为只有A,rn执行以下sql1rnselect count(A) ,B from table_1 group by Brn运行时间10秒以上rnrnrn执行以下sql2rnselect sum(case when c ="1" and d = "1" then 0 else 1),rn sum(case when c ="2" and d = "1" then 0 else 1),rn sum(case when d = "2" then 0 else 1),rnsum(case when d = "3" or d="4" then 0 else 1)rn from table_1rn执行速度5秒以上rnrn问题:sql1 是否需要给B加索引,如果B为日期类型,加索引有什么负面影响。rnsql2 可以优化么?
MYSQL NOT IN优化问题
我的sql写法:rnselect a.* from record a where a.id not in(select b.rec_id from offline_record);rn数据量:record大约2w条 offline_record大约4w条rn这样很慢,不知道为什么(record.id和offline_record.rec_id都建了索引的)rnrn网上查了not in优化,进行了以下尝试:rn1.select a.* from record a inner join offline_record b on a.id!=b.rec_idrn2.select a.* from record a where not exists(select b.rec_id from offline_record b where b.rec_id=a.id)rn1语句我知道!=这个地方应该有问题,但不知道该怎么改进,现在的写法不行,查不出来数据,rn2语句查询很慢,并且查的时候过一段时间就会卡死rn网上还有left join方式来对not in进行改进,我也试了 ,没用,查的时候很卡rn希望给帮帮忙啦,给个解决办法我 ,万分感谢了!rnrnPS:mysql是默认配置,没有进行配置优化,不论是配置优化的建议或sql语句优化的建议都可
mysql count(列名)和count(*)的区别
不要使用 count( 列名 ) 或 count( 常量 ) 来替代 count( * ) , count( * ) 是 SQL 92 定义的标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。 说明: count( * ) 会统计值为 NULL 的行,而 count( 列名 ) 不会统计此列为 NULL 值的行...
Leetcode:204. Count Primes 求素数的优化问题
Description:Count the number of prime numbers less than a non-negative number, n.Credits: Special thanks to @mithmatt for adding this problem and creating all test cases.最常见的一种代码。int count = 0;
遇到的Mysql优化问题
前几天为一个保险公司做一个咨诉系统,其中有个功能是统计报表。要求是这个报表在mysql中跑要两秒以内查询出结果,在系统之中查询要在七八秒之内,而数据量也会在百万级别以上。 本身mysql的查询性能就稍微差一些,而且mysql连表查询的效率更是差强人意。由于开始的表的设计原因,有些统计数据要在连表中来查询,而且要求的时间期限是一年以内的数据。 开始写了一个逻辑的sql,一旦数据量超过一万,那速度简
mysql查询效率优化问题
大家好,现有一问题真心求教,不慎感激rn详细如下rn[code=sql]CREATE TABLE `tb_tree` (rn `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',rn `t` INT(11) NOT NULL COMMENT 't',rn `lt` INT(11) NOT NULL COMMENT 'latency',rn `ts` BIGINT(13) NOT NULL COMMENT 'Millisecond timestamp',rn `s` VARCHAR(255) NOT NULL COMMENT 's',rn `lb` VARCHAR(255) NOT NULL COMMENT 'label name',rn `rc` VARCHAR(255) NOT NULL COMMENT 'response code ',rn `rm` VARCHAR(2550) NOT NULL COMMENT 'response message',rn `tn` VARCHAR(255) NOT NULL COMMENT 'thread name',rn `dt` VARCHAR(255) NOT NULL COMMENT 'Content-Type ',rn `bc` INT(11) NOT NULL COMMENT 'receiveBytes',rn `assertion_name` VARCHAR(255) NULL DEFAULT NULL COMMENT 'raname',rn `assertion_failure` VARCHAR(255) NULL DEFAULT NULL COMMENT 'rafailure',rn `assertion_failure_message` VARCHAR(255) NULL DEFAULT NULL COMMENT 'assertion message',rn `ng` INT(11) NOT NULL COMMENT 'number of active thread in the thread group',rn `na` INT(11) NOT NULL COMMENT 'number of active thread in the test case',rn `tgname` VARCHAR(255) NULL DEFAULT NULL COMMENT 'thread group name',rn `machine_ip` VARCHAR(255) NULL DEFAULT NULL COMMENT 'the agent ip',rn `response_data` LONGTEXT NULL COMMENT 'responsedata',rn `sent_bytes` INT(11) NULL DEFAULT NULL COMMENT 'sentBytes',rn `num_threads` INT(10) NULL DEFAULT NULL,rn `ramp_time` INT(10) NULL DEFAULT NULL,rn `script_name` VARCHAR(250) NULL DEFAULT NULL,rn `url` VARCHAR(250) NULL DEFAULT NULL,rn PRIMARY KEY (`id`),rn INDEX `ts` (`ts`),rn INDEX `t` (`t`),rn INDEX `ts_lb` (`ts`, `lb`)rn)rnCOMMENT='this is results of one test xml data'rnCOLLATE='utf8_general_ci'rnENGINE=InnoDB;[/code]rn我的查询语句rn[code=sql]select avg(t),floor(ts/1000),lb rn from tb_tree rn where ts<>0 rn group by floor(ts),lb;[/code]rnrn通过explain看到rn[img=https://img-bbs.csdn.net/upload/201305/29/1369796024_966995.jpg][/img]rnrn对于类似这种,需要在group by后面使用round,floor等聚合函数的情况下,我始终无法使用到索引,怎样提高查询效率了?rnrn另外再请问一下,我在一个存储过程中使用如上的sql语句,将结果保存在另外一张结果表中,因为源数据上亿,会莫名巧妙的出现该存储过程的进程在进过20来分钟后自动消失掉,可能会是什么原因造成的了?rn
mysql 数据库优化问题
索引的使用场景: 不会频繁变化的多个值(经常在where语句中出现;不会频繁变化;字段的内容不是多个)、 注意: 注意最左前缀优先原则 如果是like aaa%, 通配符在后的可以使用索引,反之像%aaa就不行 如果where查询条件中有or,其中有条件没有使用索引,那么即使有条件带了索引,也不会使用索引(也就是说,要求所有索引字段都能单独使用索引); 表里只有一条记录,使用全表扫描比...
关于mysql in 子查询优化问题
[img=https://img-bbs.csdn.net/upload/201612/28/1482911634_714692.png][/img] 为什么这样改了就比较快
救急 mysql 语句优化问题
UPDATE time_def SET MINUTE=1 WHERE id=(SELECT MIN(id) FROM (SELECT id FROM time_def WHERE MONTH=1) AS t)rn能不能优化rn这样的语句频繁操作rn效率不高rn大侠大虾rn帮帮忙了
mysql 查询优化问题
两个表联合查询效率问题rn1.rn查询 SELECT citedocid from doccitedoc a,(select docid from aureldoc where auid='5280272d936a8501a4870ced') b where a.docid=b.docidrn分析 [img=https://img-bbs.csdn.net/upload/201312/30/1388367260_776271.png][/img]rn2.rn查询 select citedocid from doccitedoc where docid in ('52835013395c93f76cdae195',rn'528345c3395c93f76cc8ec1c',rn'52838c2c395c93f76c4552c2',rn'52838c2d395c93f76c45533e',rn'52838c2d395c93f76c45541e',rn'52838c2b395c93f76c4550cd',rn'528328e193c2a29fc8d94645',rn'528328e193c2a29fc8d94647',rn'528328e093c2a29fc8d943a1',rn'528328e493c2a29fc8d94d49',rn'528328e593c2a29fc8d94ef7',rn'528328e193c2a29fc8d9469f',rn'528328e493c2a29fc8d94cf6',rn'528328e093c2a29fc8d9451a',rn'528328e193c2a29fc8d94646',rn'528328e293c2a29fc8d94990',rn'528328e593c2a29fc8d94f63',rn'528328e593c2a29fc8d95082',rn'52833f2b395c93f76cbe6d02',rn'52838c2b395c93f76c4550be',rn'52838c2d395c93f76c45532b',rn'52838dde395c93f76c484487',rn'52839113395c93f76c4e2021',rn'52839115395c93f76c4e2213',rn'52838c2c395c93f76c455113',rn'52838c2a395c93f76c454dc8',rn'5284f9350cc89dbd4d78744b',rn'5284585c0cc89dbd4df74e38',rn'5284f0280cc89dbd4d73cad0',rn'5284ff5c0cc89dbd4d7ba2a1',rn'5285018d0cc89dbd4d7cba6e',rn'5284adff0cc89dbd4d45ecfb',rn'5284dc1d0cc89dbd4d67ad24',rn'528478250cc89dbd4d0a56b9',rn'528478ce0cc89dbd4d0afa27',rn'5284edc90cc89dbd4d726813',rn'5284adff0cc89dbd4d45ed07',rn'5284f1eb0cc89dbd4d74afa8',rn'5284f28b0cc89dbd4d750b3b',rn'52847e650cc89dbd4d119d1c',rn'5284f84e0cc89dbd4d77f1cf',rn'528485b70cc89dbd4d17f637',rn'5284eeee0cc89dbd4d7318a9',rn'5284f0280cc89dbd4d73cae7',rn'52838c2b395c93f76c45505f',rn'528485b70cc89dbd4d17f667',rn'5284f68b0cc89dbd4d771669',rn'528501350cc89dbd4d7c8257',rn'528502200cc89dbd4d7d121e',rn'52849ea50cc89dbd4d336c35',rn'5284e97c0cc89dbd4d701841',rn'5284e97c0cc89dbd4d701860',rn'5284eb5b0cc89dbd4d71171f',rn'5284585d0cc89dbd4df74ec8',rn'528485b60cc89dbd4d17f5bc',rn'5284ac340cc89dbd4d43e16b',rn'528488210cc89dbd4d1ad05c',rn'5284792d0cc89dbd4d0b677a'rn)rn分析:[img=https://img-bbs.csdn.net/upload/201312/30/1388367316_665023.png][/img]rn3.rn查询: select a.* from doccitedoc a inner join aureldoc b on a.docid = b.docid where auid='5280272d936a8501a4870ced'rn分析:[img=https://img-bbs.csdn.net/upload/201312/30/1388367395_34363.png][/img]rnrnrn说明:aureldoc表说明rndocid 和auid 都有索引,索引类型normal 索引方式BTREErndoccitedoc表rndocid 有索引 索引类型normal 索引方式BTREErn这三种方法中,第二种方法效率最高但是这样写特别麻烦,大家有什么好的方法吗
mysql优化问题,索引
mysql中, 有个表70W的数据, 其中有一个状态字段,值有0,1,2三个,查询时每次查询出状态为0的一条,索引方面考虑了下,用处貌似不大?各位有没有什么好的建议?任何建议,都谢!
mysql优化问题求助
求问:rn在一个sql语句中 不得不用like “%str%”语句时 由于不支持索引搜索 有木有办法进行优化该类语句,rnrn另问 instr()函数是不是与like “%str%”的原理相同呢?rnrn
MySQL安装配置优化问题
一台Linux Server,配置2xQuadCore,16G内存,RAID 5rnrn业务基本上以查询位置,当然也基本上实时从其他服务器同步数据,但每天数据量应该有限。rnrn问:rn1. my.cnf应该如何优化才能发挥服务器的最大潜力?rn2. 存储引擎应该如何选择?InnoDB or MyISAM or 其他?
Mysql sql语句优化问题
sql语句:rnSELECTrn o.order_id,rn SUM(o.discountAmount) AS discountAmount,rn s.store_name,rn o.create_time AS create_time,rn o.cashPay AS cashAmount,rn o.cardPay AS cardAmount,rn m. NAME AS realname,rn o.sn,rn SUM(o.order_amount) AS order_amount,rn o.aliPay AS aliPay,rn o.wechatPay AS wechatPay,rn o.payeasePay AS payeasePayrnFROMrn es_daycount_order ornLEFT JOIN es_daycount_order_items i ON i.order_id = o.order_idrnLEFT JOIN es_goods AS g ON i.goods_id = g.goods_idrnLEFT JOIN es_member AS m ON o.operator_id = m.member_idrnLEFT JOIN es_store AS s ON m.store_id = s.store_idrnWHERErn o.store_id IS NOT NULLrnAND o.store_id IN (190, 192)rnAND o.create_time > 1483200000rnAND o.create_time < 1513958399rnAND (rn o.pay_status = 2rn OR o.pay_status = 3rn)rnAND o.sn NOT LIKE '%SO10%'rnAND o.sn NOT LIKE '%SO20%'rnGROUP BYrn i.order_idrnORDER BYrn create_time DESC;rnrnexplain结果rn[img=https://img-bbs.csdn.net/upload/201712/26/1514252659_673269.png][/img]rnrn现在查询时间是8秒左右。请问怎么优化
mysql order by优化问题
explain select im.item_id from item_message im FORCE INDEX (item_id) where ( im.keyStr like '%拉%' ) and im.class = 1 and im.top = 0 and industry = '餐饮' order by im.item_id desc LIMIT 0 , 8rnrnid select_type table type possible_keys key key_len ref rows Extra rn1 SIMPLE im index NULL item_id 4 NULL 8 Using where rnrn以上sql,可以再继续优化吗,不知为什么,type哪里总是标识index,是因为我排序的字段item_id是唯一的值有关吗?rn另外再问一个菜鸟问题,如果我不用FORCE INDEX (item_id),explain结果如下rnrnid select_type table type possible_keys key key_len ref rows Extra rn1 SIMPLE im ref Industry,class,top Industry 63 const 1 Using where; Using filesortrn这是为什么呢?虽然有了 Using filesort,但这里的type却是ref,非常不明白,而我用了FORCE INDEX 会使我其他索引,如rnkeyStr 的FULLTEXT 失效吗rnrn附索引rnTable Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment rnitem_message 0 PRIMARY 1 id A 8 NULL NULL BTREE rnitem_message 1 regional 1 regional A NULL NULL NULL YES BTREE rnitem_message 1 city 1 city A NULL NULL NULL BTREE rnitem_message 1 pic1 1 pic1 A NULL NULL NULL BTREE rnitem_message 1 pic2 1 pic2 A NULL NULL NULL BTREE rnitem_message 1 create_date 1 create_date A NULL NULL NULL BTREE rnitem_message 1 end_date 1 end_date A NULL NULL NULL BTREE rnitem_message 1 Industry 1 Industry A NULL NULL NULL YES BTREE rnitem_message 1 class 1 class A NULL NULL NULL BTREE rnitem_message 1 top 1 top A NULL NULL NULL BTREE rnitem_message 1 item_id 1 item_id A NULL NULL NULL BTREE rnitem_message 1 keyStr 1 keyStr NULL NULL NULL NULL YES FULLTEXT rnrn
MYSQL,语句优化问题查询
表存在对no字段的索引rn当执行rnexplain select * from tName where no='ZKL'时,结果为rnrnid select_type table type posssible_keys key key_len ref rows Extrarnrn1 SIMPLE tName const tname001 tname001 10 1rnrn执行rnexplain select count(*) from tName where no='ZKL',结果为rnid select_type table type posssible_keys key key_len ref rows Extrarnrn1 SIMPLE tName const tname001 tname001 10 1 Using indexrnrn两个疑问rn1、为何第一句执行时,extra反而没任何提示?rn2、用coun(*)不是会全表扫描么,怎么反而有提示using index?
mysql 语句优化问题
[code=SQL]CREATE rn TABLE date rn ( rn year varchar(4) NOT NULL, rn month varchar(2) NOT NULL, rn day varchar(2) NOT NULL,rn info varchar(20),rn INDEX date1 USING BTREE (year, month, day)rnrn ) rn ENGINE= InnoDB DEFAULT CHARSET= utf8;rnrninsert into date values('2009','01','01','xxx');rninsert into date values('2009','02','01','xxx');rninsert into date values('2009','03','01','xxx');rninsert into date values('2009','04','01','xxx');rninsert into date values('2009','05','01','xxx');rninsert into date values('2009','06','01','xxx');rninsert into date values('2009','07','01','xxx');rninsert into date values('2009','08','01','xxx');rn=============================================================rnrnroot:aaa>show index from date\Grn*************************** 1. row ***************************rn Table: datern Non_unique: 1rn Key_name: date1rnSeq_in_index: 1rn Column_name: yearrn Collation: Arn Cardinality: 8rn Sub_part: NULLrn Packed: NULLrn Null:rn Index_type: BTREErn Comment:rn*************************** 2. row ***************************rn Table: datern Non_unique: 1rn Key_name: date1rnSeq_in_index: 2rn Column_name: monthrn Collation: Arn Cardinality: 8rn Sub_part: NULLrn Packed: NULLrn Null:rn Index_type: BTREErn Comment:rn*************************** 3. row ***************************rn Table: datern Non_unique: 1rn Key_name: date1rnSeq_in_index: 3rn Column_name: dayrn Collation: Arn Cardinality: 8rn Sub_part: NULLrn Packed: NULLrn Null:rn Index_type: BTREErn Comment:rn3 rows in set (0.00 sec)[/code]rnrn================================================================================rnrn[color=#FF0000]现在我想查2009-02-01 到2009-06-01 里面的info信息.[/color]rn rnrn[code=SQL]explain select year,month,day,info from date where rnconcat(year,concat('-',concat(month,concat('-',day)))) >='2009-02-01' and concat(year,concat('-',concat(month,concat('-',day))))<='2009-06-01';rnrn+----+-------------+-------+------+---------------+------+---------+------+------+-------------+rn| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |rn+----+-------------+-------+------+---------------+------+---------+------+------+-------------+rn| 1 | SIMPLE | date | ALL | NULL | NULL | NULL | NULL | 8 | Using where |rn+----+-------------+-------+------+---------------+------+---------+------+------+-------------+[/code]rnrn各位大哥注意看了, type= ALL 如果这里的数据有几千万行,将很影响性能.rnrn所以我想问, 在不改变表结构的情况下 ,按此条件查询,怎么样才能用到这个联合索引.rnrn(注 :个人感觉 type=index 和 type=all 区别不大,扫描的行数都一样,所以最好改成eq_ref 最好了)rnrnrn rn -----忘各位大哥不吝赐教.rnrnrnrnrnrnrnrnrnrnrnrnrnrnrnrnrnrnrnrnrn
求救mysql优化问题
CREATE TABLE `eos_softs` (rn `id` int(10) NOT NULL auto_increment,rn `name` varchar(50) NOT NULL default '',rn `accessurl` varchar(50) default NULL,rn `downloaded` int(20) default '0',rn `picture` varchar(50) default NULL,rn `source` varchar(25) default NULL,rn `content` tinytext,rn `type_id` int(5) default '0',rn `url` tinyint(2) default '0',rn `status` tinyint(2) default '1',rn `keywords` varchar(50) default NULL,rn `clicked` int(9) default '1',rn `created` int(11) default NULL,rn `modified` int(11) default NULL,rn PRIMARY KEY (`id`)rn) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=25 ;rn以上是表结构,rnrn用EXPLAIN SELECT * rnFROM eos_softsrnORDER BY id DESC rnLIMIT 0 , 10 rnrn什么会出现filesortrn
请教mysql优化问题!!!
oracle sql优化的原则是能把用到索引条件写到sql语句最后面,听人说mysql刚好相反!!我这没装mysql 请教了,mysql跟oracle一样 还是相反?谢谢!!!
mysql语句优化问题
三表查询rnrnSELECT a.Id AS aId,a.Sn,a.Click,a.ShowMode,a.Name,a.MarketPrice,a.VipPrice,a.ActualNum,c.ChinaName AS cChinaName,d.Pic80,d.PicBig FROM PRODUCT AS a LEFT JOIN Cate AS c ON a.SubCateId=c.Id LEFT JOIN ProductPic AS d ON d.DefaultPic=1 AND a.Id=d.ProId ORDER BY a.Id DESC;rnrnPRODUCT 里的id和ProductPic里的proId对应,一个proId又分DefaultPic=1(产品主图)0(副图)rnrnPRODUCT 里的subcateid对应CATE里的Id(产品类别表);rnrnPRODUCT 里现有3312个产品,rnrn而 SELECT ProId FROM ProductPic WHERE DefaultPic=1 GROUP BY ProId 的结果也是3312rnrnrn我想问能不能优化最上面的SQL,避免用外联,查询速度好慢,rnrnrn而我优化后的SQL语句rnrnSELECT a.Id AS aId,a.Sn,a.Click,a.ShowMode,a.Name,a.MarketPrice,a.VipPrice,a.ActualNum,c.ChinaName AS cChinaName,d.Pic80,d.PicBig FROM PRODUCT AS a,CATE AS c,PRODUCTPIC AS d WHERE a.Id=d.ProId AND a.SubCateId=c.Id GROUP BY d.ProId ORDER BY a.Id DESC; rnrnrn结果却是3264;rnrnrn求高手帮帮我,在线等rnrn
mysql查询的优化问题
SELECT count( `Id` ) AS `total` rnFROM `tablename` rnWHERE `createtime` >= '1174585573' rnand `createtime` <= '1285592298' rnand `state` =2 rnand `union_id` = 3rnrntablename这个表有2000万条记录rn我做一个以上的查询需要20秒rnrn请问怎样才能更快点呢?rn`Id`是自增的,rn其他字段都是int类型rnrn是否要建立索引?rn应该如果建立索引呢?
mysql字段优化问题
•三类数值类型:rnTINYINT(1Byte)rnSMALLINT(2B)rnMEDIUMINT(3B)rnINT(4B)、BIGINT(8B)rnFLOAT(4B)、DOUBLE(8B)rnDECIMAL(M,D)rnBAD CASE:rnINT(1) VS INT(11)rnBIGINT AUTO_INCREMENTrnDECIMAL(18,0)rnrnbad case为什么不能这样用?求解答
MySQL Update语句的优化问题
比如,我有一个表User,字段有UserId(为自增长),UserName,Remark。rn在存储过程中,更新某一条记录时,语句为rnUPDATE `user` SET UserName = 'test', Remark = 'TestRemark' where UserId = 1rn存储过程传入两个参数PUserName,PRemark。rnrn问题是:rn 有几种情况,rn 1 是两个参数都传了值;rn 2 是只传了PUserName的值;rn 3 是只传了PReMark的值。rnrn我希望达到以下效果:如果哪个参数传的值为空,则不写Set后面的对应语句。rn哪位高手赐教?
MYSQL关于limit优化问题
今天在后台分页的时候发现打开第一页的速度和最后一页的速度不一样 当打开最后一页的时候时间真是令人发指。 我在想是不是easyUI的原因。 打开浏览器网络发现是查询请求速度慢。 我就去数据库进行了测试。 SELECT * from brand limit 0,20     0.03S SELECT * from brand limit 100,20     0.028S SELECT *
mysql中的性能优化问题
count(*) 当需要统计结果的行数时,尽量用count(*),而不是使用count(某一列)。当存在where条件时,需要先扫描条件中指定的数据,如果子条件中的数据过多,在统计行数时,可以使用相反的where条件,再用总数减去相反条件下的行数即可。 优化limit分页 如果要使用limit 1000, 20, 需要查询1020条记录,最后只返回后20条记录,前面查询到的1000条记录...
mysql语句执行效率的优化问题
我现在有一个百万行的数据库,里面有相应规模的数据表,但是可能每次查询更新的行数不会超过20000行,因为用到了联表查询,特别的慢,有什么办法可以优化一下吗?rn我虽然在where语句里加了筛选条件,但是仿佛联表的时候还是把全部的联上了
mysql 百万条记录 的优化问题
mysql百万条记录,已根据需求做了相关索引 使得查询操作速度提升rn但系统要频繁的进行 500条左右数据的批量插入rn这样在有索引的情况下就非常慢 请问有没有好的解决办法能够统筹兼顾
关联查询,mysql子查询优化问题
求大神帮优化下这个sql,这个sql用到导出数据中,这个sql是先查查1600条课程,然后子查询查出该门课程的分数返回,1600条数据全部导出需要快5分钟。主要应该是评价统计主表有evaluation_statistical9万条数据原因,有时导出甚至直接请求超时了,求大神帮优化。nSELECT DISTINCTnj2.KCDM,nj2.KCMC,nj2.JSZGH,nj2.JSXM,( SELECTnn( SELECTnsum(e5.level_score)nFROMn`evaluation_statistical` e4nJOIN evaluation_level e5 ON e4.level_id = e5.level_idnWHEREne4.bpjr_id=j2.JSZGH andne4.semester_id = '44a4424321114e7499715d0b1f46ed96'nAND e4.course_id = j2.KCDMn) / n(nSELECTncount(1)nFROMn`evaluation_statistical` e3nWHEREn e3.bpjr_id=j2.JSZGH andne3.semester_id ='44a4424321114e7499715d0b1f46ed96'nAND e3.course_id = j2.KCDMn)n) as scorenFROMnjw_jskcb j2 WHERE CONCAT(j2.JSZGH,j2.KCDM) INn(SELECT DISTINCT CONCAT(e.bpjr_id,e.course_id) FROM evaluation_statistical e nWHERE e.isinvalid = '1'nAND e.evaluation_state = '1')
MYSQL WHERE+IN+ORDER BY 优化问题?
近期对网站压力测试,遇到个SQL优化问题。rnrn 数据库中有100万条数据,用select查询时相应时间特长怎么解决?rnrn 1、数据库结构 CREATE TABLE `shinyv_content_main` ( rn `id` int(11) unsigned NOT NULL auto_increment, rn `title` varchar(100) collate utf8_unicode_ci default NULL, rn `title_alias` varchar(100) collate utf8_unicode_ci default NULL, rn `state` tinyint(3) default '0', rn `sectionid` int(11) unsigned default '0', rn `catid` int(11) unsigned default '0', rn `created` datetime default '0000-00-00 00:00:00', rn `images` text collate utf8_unicode_ci, rn `ordering` int(11) default '0', rn `hits` int(11) unsigned default '0', rn `siteUserId` int(11) default NULL, rn `vidtype` tinyint(2) default '3', rn PRIMARY KEY (`id`), rn KEY `idx_section` (`sectionid`), rn KEY `hits` (`hits`), rn KEY `ordering` (`ordering`), rn KEY `created` (`created`), rn KEY `idex_sectionid_state` (`sectionid`,`state`), rn KEY `idx_sectionid_ordoring` (`sectionid`,`ordering`), rn KEY `idx_sectionid_created` (`sectionid`,`created`) rn ) ENGINE=MyISAM rn 2、SQL语句 SELECT a.id as contentidrn FROM shinyv_content_main AS a rn WHERE a.state = 1 AND a.sectionid in(85,81,78,82,74)rn AND a.vidtype=3 ORDER BY a.ordering desc limit 50rnrn 当运行2中的SQL时相应时间有4、5秒,太不能让我承受,查了下资料说是IN的问题(有人说要用强制索引,分表),试了但效果不理想,跪求各位大侠能给个好的办法。线上等rn
MYSQL查询优化问题
两个表,一是类别表,内有类ID和类别名,另一是文章表,现要查一ID为7的文章的类名和题目,时间,内容rnSELECT a.dk_name,b.dia_title,b.dia_time, b.dia_content from (select * from diary where dia_id=7) b inner join dia_kind a on a.dk_id=b.dia_dk_idrnrnSELECT a.dk_name,b.dia_title,b.dia_time, b.dia_content from (select * from diary where dia_id=7) b , dia_kind a where a.dk_id=b.dia_dk_idrnrnSELECT a.dk_name,b.dia_title,b.dia_time, b.dia_content from diary b inner join dia_kind a on a.dk_id=b.dia_dk_id where b.dia_id=7rnrn请问哪种查询好些,或还有更好吗
一个简单的mysql 优化问题
现在有2个查询rn第一个查询的是在web页面中显示list数据rn第二个查询是根据第一个list中选择的行的id 查询对应表的详情rnrn现在分页查询第一个list表,前进,后退的翻页都很快rnrn现在如果进行了一次详情查询,然后返回到list页中,再进行翻页查询就会卡上2-3秒, 然后再翻页速度正常,rn每次点击详情后返回都会出现 ,是什么原因? 要如何优化?
MySQL性能优化问题
我做了一个MySQL性能优化测试,但是测试结果让我感到惊讶。rnrn首先,我为我的测试准备了几个表,它们是“t_Worker_考勤_300 w(300万数据)、t_Worker_考勤_1000 w(1000万数据)、t_Worker_考勤_1Y(1亿数据)、t_Worker_考勤_4y(4亿数据)”。rnrn每个表都有相同的字段,相同的索引,它们是被复制粘贴的,包括4亿的数据量也从300万个数据增加。rnrn据我理解,MySQL的性能肯定会受到数据量大小的严重影响,但结果已经困扰了我整整一周。我几乎已经测试了我能想到的场景,但是它们的执行时间是一样的!rnrn这是一个新的MySQL 5.6.16服务器,我测试了我能想到的任何场景,包括内部连接.rnrn为了节约每个人的时间,这里我将表信息全部举列在这里:rn[code=sql]A) SHOW CREATE TABLE t_worker_attendance_4yrnrnCREATE TABLE `t_worker_attendance_4y` (rn`id` bigint(20) NOT NULL ,rn`attendance_id` char(32) NOT NULL,rn`worker_id` char(32) NOT NULL,rn`subcontractor_id` char(32) NOT NULL ,rn`project_id` char(32) NOT NULL ,rn`sign_date` date NOT NULL ,rn`sign_type` char(2) NOT NULL ,rn`latitude` double DEFAULT NULL,rn`longitude` double DEFAULT NULL ,rn`sign_wages` decimal(16,2) DEFAULT NULL ,rn`confirm_wages` decimal(16,2) DEFAULT NULL ,rn`work_content` varchar(60) DEFAULT NULL ,rn`team_leader_id` char(32) DEFAULT NULL,rn`sign_state` char(2) NOT NULL ,rn`confirm_date` date DEFAULT NULL ,rn`sign_mode` char(2) DEFAULT NULL ,rn`checkin_time` datetime DEFAULT NULL ,rn`checkout_time` datetime DEFAULT NULL , rn`sign_hours` decimal(6,1) DEFAULT NULL ,rn`overtime` decimal(6,1) DEFAULT NULL ,rn`confirm_hours` decimal(6,1) DEFAULT NULL ,rn`signimg` varchar(200) DEFAULT NULL ,rn`signoutimg` varchar(200) DEFAULT NULL ,rn`photocheck` char(2) DEFAULT NULL ,rn`machine_type` varchar(2) DEFAULT '1' ,rn`project_coordinate` text ,rn`floor_num` varchar(200) DEFAULT NULL ,rn`device_serial_no` varchar(32) DEFAULT NULL ,rnKEY `checkin_time` (`checkin_time`),rnKEY `worker_id` (`worker_id`),rnKEY `project_id` (`project_id`),rnKEY `subcontractor_id` (`subcontractor_id`),rnKEY `sign_date` (`sign_date`),rnKEY `project_id_2` (`project_id`,`sign_date`)rn) ENGINE=InnoDB DEFAULT CHARSET=utf8[/code]rnrn[code=sql]B) SHOW INDEX FROM t_worker_attendance_4yrnrn+------------------------+------------+------------------+--------------+------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+rn| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |rn+------------------------+------------+------------------+--------------+------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+rn| t_worker_attendance_4y | 1 | checkin_time | 1 | checkin_time | A | 5017494 | NULL | NULL | YES | BTREE | | |rn| t_worker_attendance_4y | 1 | worker_id | 1 | worker_id | A | 1686552 | NULL | NULL | | BTREE | | |rn| t_worker_attendance_4y | 1 | project_id | 1 | project_id | A | 102450 | NULL | NULL | | BTREE | | |rn| t_worker_attendance_4y | 1 | subcontractor_id | 1 | subcontractor_id | A | 380473 | NULL | NULL | | BTREE | | |rn| t_worker_attendance_4y | 1 | sign_date | 1 | sign_date | A | 512643 | NULL | NULL | | BTREE | | |rn| t_worker_attendance_4y | 1 | project_id_2 | 1 | project_id | A | 102059 | NULL | NULL | | BTREE | | |rn| t_worker_attendance_4y | 1 | project_id_2 | 2 | sign_date | A | 1776104 | NULL | NULL | | BTREE | | |rn+------------------------+------------+------------------+--------------+------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+[/code]rnrn[code=sql]C) EXPLAIN SELECT SQL_NO_CACHE tw.project_id, tw.sign_date FROM t_worker_attendance_4y tw WHERE tw.project_id = '39235664ba734887b298ee568fbb66fb' AND sign_date >= '07/01/2018' AND sign_date < '08/01/2018' ;rn+----+-------------+-------+------+-----------------------------------+--------------+---------+-------+----------+--------------------------+rn| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |rn+----+-------------+-------+------+-----------------------------------+--------------+---------+-------+----------+--------------------------+rn| 1 | SIMPLE | tw | ref | project_id,sign_date,project_id_2 | project_id_2 | 96 | const | 54134596 | Using where; Using index |rn+----+-------------+-------+------+-----------------------------------+--------------+---------+-------+----------+--------------------------+[/code]rnrn它们都通过了相同的联合索引rn[code=sql]SELECT tw.project_id, tw.sign_date FROM t_worker_attendance_300w tw rnWHERE tw.project_id = '39235664ba734887b298ee568fbb66fb' rnAND sgin_date >= '07/01/2018' rnAND sgin_date < '08/01/2018' LIMIT 0,10000;rnrnExecution time: 0.02 sec[/code]rn[code=sql]SELECT tw.project_id, tw.sign_date FROM t_worker_attendance_1000w tw rnWHERE tw.project_id = '39235664ba734887b298ee568fbb66fb' rnAND sgin_date >= '07/01/2018' rnAND sgin_date < '08/01/2018' LIMIT 0,10000;rnrnExecution time: 0.01 sec[/code]rn[code=sql]SELECT tw.project_id, tw.sign_date FROM t_worker_attendance_1y tw rnWHERE tw.project_id = '39235664ba734887b298ee568fbb66fb' rnAND sgin_date >= '07/01/2018' rnAND sgin_date < '08/01/2018' LIMIT 0,10000;rnrnExecution time: 0.02 sec[/code]rn[code=sql]SELECT tw.project_id, tw.sign_date FROM t_worker_attendance_4y tw rnWHERE tw.project_id = '39235664ba734887b298ee568fbb66fb' rnAND sgin_date >= '07/01/2018' rnAND sgin_date < '08/01/2018' LIMIT 0,10000;rnrnExecution time: 0.02 sec[/code]rn......rnrn我猜想MySQL的查询性能会随着数据量的增加而急剧下降,但两者并没有太大的不同。因此,我无法优化我的查询。我不知道何时实现表分区计划或子数据库子表计划。rnrn我想知道的是,为什么小数据量索引的执行速度与大数据量索引的执行速度相同。如果你能帮我,我非常感谢你。
MySql中count(*)和count(字段)的区别
兼容oracle,sqlserver,mysql数据库对null和’’(空)的不同处理的解决方法 /** * Oracle: 不区别对待 ''(空) 和 NULL,插入 '' 会自动转为 null * MySql: 插入的 NULL是 NULL,''(空)是 ''(空) * Sql server: 插入的 NULL 是 NULL,''(空)是 ''(空) ...