mysql sql 语句调优 rand()为啥不稳定 10C

图片说明

请教一下 第二个sql 为啥 会查出null 数据, 或者出现两条数据 我把sql 贴出来

    SELECT a.id,a.pid 
    FROM `shopinfo` a  
    WHERE a.id=(select id 
                            from ( SELECT id,rand() as random_num 
                                         FROM bookinfo 
                                         where status='1') a 
                            order by a.random_num 
                            limit 1)      




            SELECT a.id,a.pid
            FROM `shopinfo` a  
            WHERE a.id=( SELECT id 
                                    FROM bookinfo 
                                    where status='1'  
                                    order by rand() 
                                    LIMIT 1 )

4个回答

SELECT a.id,a.pid
FROM shopinfo a

WHERE a.id=(select id
from ( SELECT id,rand() as random_num
FROM bookinfo
where status='1') a
order by a.random_num
limit 1)
最外层的where 应该不是a.id吧 a.id与子查询的id是不同表的id 那当然可能有数据 可能没数据了

Myweblog
Myweblog 回复Myweblog: 第一个用同一个别名 在子查询中是不影响的
一年多之前 回复
Myweblog
Myweblog 第二个 sql有问题 0.0 SELECT a.id,a.pid FROM shopinfo a WHERE a.id=( SELECT id FROM bookinfo where status='1' order by rand() LIMIT 1 )
一年多之前 回复
z562743237
zsc我行我素 回复Myweblog: 说的就是你有问题的那个
一年多之前 回复
Myweblog
Myweblog soryy 我把sql语句放反了
一年多之前 回复
Myweblog
Myweblog sql二 没问题 sql一 有问题 ,但有问题还不是必现的
一年多之前 回复

SELECT a.id,a.pid
FROM shopinfo a

WHERE a.id=(select id
from ( SELECT id,rand() as random_num
FROM bookinfo
where status='1') a
order by a.random_num
limit 1)
最外层的where 应该不是a.id吧 a.id与子查询的id是不同表的id 那当然可能有数据 可能没数据了

因为bookinfo里面随机取的id在shopinfo里不存在?
建议两张表直联之后再rand查询,就不会null了,而且子查询效率也低啊。。
select a.id, a.pid from shopinfo a, bookinfo b where a.id=b.id and b.status='1' order by rand() limit 1

rand本身确实是不稳定的,你要将它设置为基于时间的rand,这样就可以了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
MySQL随机函数RAND() 概率不稳定
MySQL随机函数RAND() 概率不稳定 说明一下问题 在一下查询的时候,虽然都是使用RAND()<(20/100)进行随机筛选数据,但是前者获取的比例并不在20%左右,而是在5%左右。 唯一不同的地方在与子查询里面的条件a.pos_sn = b.pos_sn和 a.merchant_code = b.merchant_code,并且其他条件都一样。 【这两个条件不影响子查询的结果,子查询...
mysql sql语句调优
1.一些简单sql调优n 2.复杂sql的调优
MySQL语句调优
.注意那些情况会导致索引失效,比如:where xxx like ‘%xxx%’、xxx in|not in() .不要在 where 子句中的“=”左边进行函数|表达式计算,可能导致无法正确使用索引 .where和order子句新建索引,提高查询效率,但是也不能新增太多索引否则会降低数据库性能 .尽量避免大事务操作,提高系统并发能力。 .尽量避免向客户端返回大数据量。 ...
mysql sql语句调优及,索引总结
Mysql的索引 1.btree索引,btree索引是二叉平衡树的结构表有(myisam innodb), 2.Hash索引,通过hash算法计算到的索引是随机的没有规律(memory),没有回杭 一、Btree索引 索引同时只能用上一个 查询一条sql的执行计划 Explain sql \G 此语句体现在 查询时索引使用情况分 查看sql执行的时间 Set profiling=
sql调优实践(mysql)
首先来创建表 --学生表 DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` int(11) NOT NULL, `name` varchar(10) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; --课程表 D...
sql语句调优请教
select t5.*,rn (select count(*)rn from t_event_operate t1rn where t1.eventid = t5.eventidrn and t1.organcode = '22222'rn and t1.operatertype = 'B'rn and t1.operatestate = 1) isUpReport,rn (select count(*)rn from t_event_relation t2rn where t2.eventid = t5.eventidrn and t2.type = '2') isRenewrn from (select o.*, rownum rnumrn from (select m.*rn from (select n.*rn from t_event nrn WHERE (n.eventid inrn (select t1.eventidrn from (select t.eventid, max(t.operateid + 0)rn from t_event_operate trn where t.operatertype != 'A'rn group by t.eventid) t1))rn and n.eventid not inrn (select p.eventidrn from t_event_operate prn where p.operatertype = 'A')rn and n.validFlag = 1rn and (n.receiverorgancode = '22222' orrn n.reportOrganCode = '22222' orrn n.eventid inrn (select p.eventidrn from t_event_operate prn where p.operatertype = 'D'rn and p.organcode = '22222'))rn ) m) o rn [color=#FF0000] order by o.occurTime desc[/color]rn ) rnrn数据库中有1万条数据,加了排序,时间很慢用时4s,不加时间排序,时间很快,不到0.1s,请问这个sql应该怎么调优啊?
一个SQL语句的调优
CREATE TABLE TB_CRM_QYCL_USER ASrnSELECT D.*, A.SERVICE_NBR ACC_NBRrn FROM IBA3.TB_PRD_PRD_INST_553 A,rn IBA3.TB_PRD_SUB_PRD_INST_553 B,rn IBA3.TB_PRD_SUB_PRD_INST_FEA_553 C,rn TB_QYCL_EXP_INFO Drn WHERE A.PRD_INST_ID = B.MAIN_PRD_INST_IDrn AND B.PRD_INST_ID = C.PRD_INST_IDrn AND B.PRD_INST_STAS_ID = 1001rn AND A.PRD_INST_STAS_ID IN (1001, 1201)rn AND C.VAL = D.集团代码;rn这个ORACLE下的建表语句要1个多小时,谁能优化下TB_PRD_PRD_INST_553,TB_PRD_SUB_PRD_INST_553,TB_PRD_SUB_PRD_INST_FEA_553都是百万记录的表,TB_QYCL_EXP_INFO是十几万记录的表,PRD_INST_ID,MAIN_PRD_INST_ID,VAL,集团代码都有索引,谁能帮忙优化下?
SQL语句调优
在数据量非常大的情况下查询语句的优化就显得非常重要了,有时候代码上一点细微的差别就可能导致查询时间成倍的增加。一般的调优从建表和查询本身的优化两个方面来进行。一、建表从数据库的设计开始就应该考虑到查询效率的问题,所以从建表方面,应该从考虑到以下几个方面:1、主键列的长度应该尽量的小,能用smallInt就不用Int。2、对于身份证号码等长度固定的字符型字段,不应使用varchar或者nvarcha...
oracle SQL语句调优
一、模糊查询语句 instr和like 区别:instr比like快 字段名 like '%内容%' instr(字段名,内容)>0   相当于like “%内容%” =0    相当于not like “%内容%” =1    相当于like “内容%”...
sql语句的调优
尽量使用列名来查询:(在Oracle9I之前的版本,在其之后,Oracle对* 进行了优化,让的 功能跟列名一样。)在Oracle9I以前的版本,当读取到的时候,首先要在对应的表里面查 询有哪些列,然后再做查找,不管表包含列的多少,都需要时间where语句中,使用逻辑运算符过滤的时候:是从右往左解析的, 所以在面对and过滤的 时候,尽量把可能出错的放在右边。or过滤的时候,尽量把正
sql语句调优
对于索引的认识 1 当在where语句中存在is null 或者 is not null时,索引不能被使用 2 在where语句中出现联结的列(||)时,索引不能被使用,可通过函数进行拆分 3 使用"%CHAR%"通配符,索引不能被使用,而使用"CHAR%"时索引可被使用 4 任何在order by语句的非索引项或者有计算表达式都降低查询速度 5 NOT语句不能使用索引,可转化为相关的表...
oracle调优SQL语句
select t.*, t.rowid from psecurity t where (t.suser,t.iobject,t.ipermission) in (select suser,iobject,ipermission from psecurity group by suser,iobject,ipermission having count(*)>1) -- 检查当前剩余空间 S...
sql语句为啥错
select * from [b_articles] where or title '%的%' or content '%的%' and cid in (select id from [b_article_categories] where parent =34) 高手帮助
SQL调优案例,MYSQL服务器性能调优
服务器环境见下表 服务器环境 序号 名称 版本 内存 CPU 1 Windows Server 2008 64bit R2 16G 2 2 Mysql 5.7 256M 2 问题现象
sql调优 sql调优
sql调优.rar sql调优.rar sql调优.rar sql调优.rar
一条SQL语句调优,急急
Select ifdl.ifdl_dp_number,rn ifdh.ifdh_operations_typern from ifdpline ifdl, ifdphead ifdhrn where ifdl.ifdl_pid = ifdh.ifdh_idrn and ifdl.ifdl_dp_number like 'KMTC ULSAN/701S/KMTC/E%'rn and ifdl.ifdl_org_id = '139'rn and (ifdl.ifdl_cust_code = 'ESSA00100489' or ifdl.ifdl_vendor_code = 'ESSA00100489')rn and exists(select 1 rn from FEXPENSE fexp, FCONSIGN fcsgrn where fexp.FEXP_CONSIGN_ID = fcsg.FCSG_CONSIGN_IDrn and ('F' || fexp.fexp_expense_id || 'C' = ifdl.ifdl_dp_line_number or 'F' || fexp.fexp_expense_id = ifdl.ifdl_dp_line_number)) rnrn这个语句的and ('F' || fexp.fexp_expense_id || 'C' = ifdl.ifdl_dp_line_number or 'F' || fexp.fexp_expense_id = ifdl.ifdl_dp_line_number)导致了索引失效,有什么写法可以满足该业务并提高效率,谢谢大家
SQL语句常用的调优方法
SQL语句常用的调优方法 AWR解读 SQL优化
mysql常用sql及调优查询
1、修改自增主键的下一次取值 alter table label AUTO_INCREMENT=255; 设置自增id的当前值为255 2、连接数据库 100.200.159.14 端口8006 用户命名name/password 数据库名test_database mysql -h100.200.159.14 -P8006 -uname -ppassword -D test...
【知识积累】MYSQL之SQL调优
1、EXPLAIN https://blog.csdn.net/axin1240101543/article/details/86626987 关注属性:type(访问类型 ref:最好 range:至少)、possible_keys(可能使用的索引)、key(实际使用的索引)、key_len(越小越好)、rows(越小越好)、Extra(避免temporary、避免filesort) 2、...
求一SQL语句调优!
SELECT BD.DESCRIPTION DEPARTMENT_NAME,--领料部门rn MSI.SEGMENT1 ITEM_NUMBER,--原材料编码rn MSI.DESCRIPTION ITEM_DESCRIPTION,--描述rn MSI.PRIMARY_UOM_CODE UNIT,--单位rn WRO.REQUIRED_QUANTITY REQUIRED_QUANTITY,--组件需要数量rn WE.WIP_ENTITY_NAME ENTITY_NAME,--任务号rn MSI1.SEGMENT1 ITEM_NUMBER1,--商品编码rn WDJ.ATTRIBUTE1 ATTRIBUTE1--销售合同号rn FROM WIP_REQUIREMENT_OPERATIONS WRO,rn BOM_DEPARTMENTS BD,rn MTL_SYSTEM_ITEMS_B MSI,rn MTL_SYSTEM_ITEMS_B MSI1,rn WIP_ENTITIES WE,rn WIP_DISCRETE_JOBS WDJ,rn MTL_ITEM_CATEGORIES_V MCA,rn MTL_CATEGORIES MCrn WHERE WRO.DEPARTMENT_ID=BD.DEPARTMENT_IDrn rn AND WRO.INVENTORY_ITEM_ID=MSI.INVENTORY_ITEM_IDrn AND WRO.ORGANIZATION_ID=MSI.ORGANIZATION_IDrn AND WRO.ORGANIZATION_ID=:P_ORGANIZATION_IDrnrn AND WDJ.PRIMARY_ITEM_ID=MSI1.INVENTORY_ITEM_IDrn AND WDJ.ORGANIZATION_ID=MSI1.ORGANIZATION_IDrn rn AND WDJ.ORGANIZATION_ID=WE.ORGANIZATION_IDrn AND WDJ.WIP_ENTITY_ID=WE.WIP_ENTITY_IDrn rn AND WRO.ORGANIZATION_ID=WDJ.ORGANIZATION_IDrn AND WRO.WIP_ENTITY_ID=WDJ.WIP_ENTITY_IDrnrn AND MCA.CATEGORY_ID=MC.CATEGORY_IDrn AND WRO.INVENTORY_ITEM_ID=MCA.INVENTORY_ITEM_IDrn AND MCA.ORGANIZATION_ID=WE.ORGANIZATION_IDrnrn AND ((:P_ORDER_NUM_BEGIN<=WDJ.ATTRIBUTE1 OR :P_ORDER_NUM_BEGIN IS NULL)rn AND (:P_ORDER_NUM_END>=WDJ.ATTRIBUTE1 OR :P_ORDER_NUM_END IS NULL))rn AND ((:P_DEPART_BEGIN<=WRO.DEPARTMENT_ID OR :P_DEPART_BEGIN IS NULL)rn AND (:P_DEPART_END>=WRO.DEPARTMENT_ID OR :P_DEPART_END IS NULL))rn AND ((:P_ENTITY_BEGIN<=WE.WIP_ENTITY_NAME OR :P_ENTITY_BEGIN IS NULL)rn AND (:P_ENTITY_END>=WE.WIP_ENTITY_NAME OR :P_ENTITY_END IS NULL))rn AND ((:P_ITEM_BEGIN<=MSI.SEGMENT1 OR :P_ITEM_BEGIN IS NULL)rn AND (:P_ITEM_END>=MSI.SEGMENT1 OR :P_ITEM_END IS NULL))rn AND ((:P_DATE_BEGIN<=WDJ.SCHEDULED_START_DATE OR :P_DATE_BEGIN IS NULL)rn AND (:P_DATE_END>=WDJ.SCHEDULED_START_DATE OR :P_DATE_END IS NULL))rn AND (MSI.ITEM_TYPE IS NULL OR MC.SEGMENT1=:P_PRINT1)rn AND MC.STRUCTURE_ID=101rnrn其中MTL_SYSTEM_ITEMS_B是一个非常大的表
【Mysql】复杂SQL调优一例
*相关表已经脱敏处理1.原SQLSELECT tmp.PARTY_ID, s.TICKER_SYMBOL, tmp.SHAREHOLDER_NAME, tmp.END_DATE_NEW, tmp.SHARE_NUM_NEW, tmp.END_DATE_LAST, tmp.SHARE_NUM_LAST,
mysql高级(三)——sql调优
小表驱动大表 使用in的sql:select * from A where id in (select id from B) 等价于: for select id from B for select * from A where A.id = B.id 当B表的数据小于A表的数据集时,用in 使用exists的sql:select * from A w...
关于SQL语句调优的问题
请教高手如何把以下sql语句调整成查询速度最快? 一下sql语句返回结果有70万条记录,where条件字段都是索引字段。rnSELECT "T_APPEAL"."C_SERNO", rn "T_APPEAL"."C_OPTTYPE", rn "T_APPEAL"."C_OPTNO", rn "T_APPEAL"."C_PROCDATE_A", rn "T_APPEAL"."C_CARDNO", rn "T_APPEAL"."C_TEL", rn "T_APPEAL"."C_STATUS", rn "T_AGENT"."C_NAME", rn "T_APPEAL"."C_PROCDATE_B", rn "T_APPEAL"."C_TITLE", rn "T_APPEAL"."C_DEPTNO_A", rn "T_APPEAL"."C_DEPTNO_B" rn FROM "T_APPEAL", rn "T_AGENT" rn WHERE ( "T_APPEAL"."C_OPTNO" = "T_AGENT"."C_NUMBER" ) and rn (( "T_APPEAL"."C_STATUS" > '1' ) AND rn (to_char("T_APPEAL"."C_PROCDATE_A",'yyyy-mm-dd') between '2006-12-25' and '2008-12-25' OR rn to_char("T_APPEAL"."C_PROCDATE_B",'yyyy-mm-dd') between '2006-12-25' and '2008-12-25') AND rn "T_APPEAL"."C_CARDNO" like '%%' ) rnORDER BY "T_APPEAL"."C_SERNO" DESC
oracle的SQL语句调优总结
oracle的SQL语句调优总结,Oracle语句优化53个规则详解。
这个sql语句为啥不对?
[code=SQL]update table1 t1 set t1.code=t2.code from table2 t2,table1 t1 where t2.t1_id=t1.id and t1.name='aa'[/code]rnrn就是想从table2表中取code更新到对应的table1中,(table2中有个t1_id字段和t1的id是关联的)rn应该怎么写才行?谢谢,用的order
??这条sql语句为啥不对??
select PaperID ,StudentIDrnfrom StudentsArrange rnwhere PaperID in(select PaperID from……) //子查询rngroup by StudentIDrnhaving count(PaperID)>1rnrn这条语句出错说StudentsArrange.PaperID既不在group by中也不在聚合函数中rn为啥呀?书上就有类似的语句呀rn我的StudentArrange表中只有PaperID和StudentIDrn这是一个试卷安排表rn该select语句是查出rn一张试卷中一个考生出现好几次的PaperID和StudentIDrn是不是因为StudentArrange表设计的不对呀?
sql语句为啥执行不对?
[img=https://img-bbs.csdn.net/upload/201403/12/1394602522_270843.jpg][/img]rnrn见图,rnrnin里的select是可以查出来的。rnrn把select里的结果放到in语句也是有的。rnrn但是写在一个语句里就没有数据?为啥?
mysql 调优
最近发现mysql 服务器的cpu 使用率 经常保持在 99% 因为是 16核的机器,所以起初没太当回事,因为有其他更紧急的事情需要处理,就没有管他,后来有时间了,就静下心来执行的排查了下, 现在把排查的过程记录下来,作为比较。供以后查看 通过htop 命名 查看 mysql 的cpu 使用率 特别高 连上mysql 数据库 mysql -u root -p 使用 show proce...
mysql调优
MySQL SQL Query Analyzer
MySql调优
参考资料: 互联网高并发场景db优化
Mysql调优
Mysql调优 1. 数据库是否是性能瓶颈? 通过日志埋点或druid等工具查看数据库访问时间在整个调用过程中消耗时间的占比情况。 是否表中数据量太大引起的,太大要考虑分库分表 查看mysql所在服务器的内存、cpu占用情况(top命令),查看mysql占用cpu和内存的大小(iostat命令)。 若mysql开启了慢查询日志,查看慢查询日志,看是否是由慢查询造成的。 2.确...
MySQL调优
为什么要进行优化? 避免由数据库链接timeout产生页面5xx的错误 避免由于慢查询造成页面无法加载 避免由于阻塞造成数据无法提交 优化用户体验 可以从哪几个方面进行数据库优化? image从图中可以看出,SQL及索引的优化是最重要的,成本最低效果最好。下面分别来看看如何优化SQL和索引。 SQL优化 慢查询日志配置 可以使用慢查询日志对有效率问题的SQL进行监控。下面...
MYSQL调优--
《DB2+SQL性能调优秘笈》,Effective MySQL之SQL语句最优化,MySQL管理之道,性能调优,高可用与监控(第二版),MySQL性能调优与架构设计,MySQL最佳优化完美攻略,深入浅出MySQL数据库开发优化与管理维护,数据库查询优化器的艺术:原理解析与SQL性能优化
语句调优
                                                    语句调优 语句调优基础知识 1.set statistics time on 2.set statistics io on 3. set statistics profile on 语句调优从以下几个方面着手: 1.确认是否是因为做了物理I/O而导致的性能不佳。 2.确认是否是因为...
sql随机函数rand,求一条语句
在SQL中怎么随机取得180~200之间的整数
MySQL,MySQL调优
。。。。。。。。。MySQL,MySQL特级调优。。。。。。
mysql sql语句调优-陈阵-专题视频课程
1.一些简单sql调优 2.复杂sql的调优
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件