北京东方瑞通mysql_MYSQL 查询条件的函数不要乱用, 与随机函数怎么走索引

偶然想起一事,具体的人和场景就不提了,事情是一条语句,明明是很简单的一句话,有索引,验证也是很快了,但只要在程序里面就慢的要死。后来发现是在语句后面使用了某函数,造成了问题。OK 我们来做一个测试,稍微的还原一下场景。

我们创建一个表

CREATE TABLE `rand_table` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`msg_code` varchar(20) DEFAULT NULL,

`insert_date` datetime DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

创建一个存储过程来进行数据的填充

create PROCEDURE insert_data()

begin

declare i int;

declare msg int;

declare msg_ch varchar(20);

set i = 1;

set msg = 1;

while i < 10000000 do

set msg=  floor(rand()*10000);

set msg_ch=convert(msg,CHAR);

insert into rand_table (msg_code,insert_date) values (msg_ch,now());

set i=i+1;

end while;

end

然后我们给这个“白开水的表”创建索引,并且查询,OK 一定是走索引的。

3374f59096ba69b1491a7a00c3e2e8d5.png

下面的语句目的是随机的选择一个数来匹配rand_table  中的一个字段,

select * from rand_table where msg_code = floor(rand()*1000);

0614263e5ba6301ac2c292f46b92f161.png

结果是可以出来的,没有问题,但反过来在看看执行计划, 80几万的数据要全表扫描,这怎么看上去都不美好。

4f3cb1c188fff3a369519fa117c812e1.png

写这个语句的人,怀疑是数据的分布有问题,经过验证不是,并且都后面的filtered 看也不可能是这个问题,下图可以看到,缺失不是因为数据分布造成的问题。

6af61572cfab143b39f900dd1818cc9f.png

那到底是怎么产生这个问题的,MYSQL 的在查询中,由于后面的函数rand() 是一个随机的函数,他反馈的也是一个随机的值,相关的对比不是获得了值后进行查询而是每一行都需要和随机值对比,虽然随机值在对比的时候应该是一致的。

我觉得我说道这里,已经有人抱着怀疑的心态,想着这人是不是在 胡说八道的心情在看这段文字了,OK  我们来验证一下。下面是两个自建的函数,就是要证明我上边说的不是胡说八道,注意两个函数没有大的区别,仅仅在

DETERMINISTIC 上有区别,下边的第一个

DELIMITER $$

create function pick_up_rand() returns int

DETERMINISTIC

BEGIN

RETURN floor(rand()*1000);

end

$$

DELIMITER $$

create function pick_up_rand_n() returns int

NOT  DETERMINISTIC

BEGIN

RETURN floor(rand()*1000);

end

$$

从下图看,1 证明我的观点是正确的,的确不确定的数值在MYSQL 中是要进行全表扫描的, 2 类似这样的问题,可以采用在写一个函数,并且将其确定化来满足这样的需求,同时也满足MYSQL 查询优化器选择索引的可能性。

625ea53f32bd1d0913fb0e91c03f7530.png

6014a751ce8db64c63be5703222ea49e.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
### 回答1: CISSP是一种全球公认的信息安全管理认证,其涵盖的领域很广,包括安全性管理、安全资产管理、安全工程、安全操作等方面。东方瑞通的CISSP课程讲义对于想要学习或者考取CISSP认证的人来说是非常有帮助的。 东方瑞通的CISSP课程讲义通过文字、图片、图表、案例分析等形式对CISSP的知识点进行系统讲解,将信息安全管理领域涉及的重点、难点内容覆盖到了其中。通过阅读讲义,学员可以对CISSP体系结构有一个全面的了解,同时也能获得CISSP考试所必需的知识和技能。 此外,讲义还提供了精心编制的习题,帮助学员检验自己的学习成果和考试准备情况。这些习题具有一定的难度,能有效锻炼学员的思维能力和考试应对能力。 总的来说,东方瑞通的CISSP课程讲义是一份非常好的学习资料,有助于学员深入了解CISSP考试和信息安全管理的相关知识,是考取CISSP认证的必备资料。 ### 回答2: CISSP是国际上公认的信息安全管理领域的最高证书,也是世界上最具权威性和最具普及性的信息安全专业认证之一。对于想要从事信息安全管理行业的人员来说,拥有CISSP证书可以证明自己掌握了全面的信息安全知识和管理技能,具备了较强的综合能力和可信度。 而东方瑞通是一家专业的信息安全服务商,除了提供网络安全、应用安全、数据安全等全方位的安全防御和咨询服务外,还注重培养信息安全人才,为客户提供技术和人才的双重支持。其CISSP讲义可以帮助学习者提高信息安全管理水平,掌握CISSP考试所需的知识和技能,为将来从事信息安全管理工作打下坚实的基础。 该讲义从11个领域入手,详细介绍了CISSP所需的知识和技能,包括安全和风险管理、资产安全管理、网络安全、身份和访问管理、应用程序安全、密码学、安全体系结构和设计、通讯和网络安全、业务连续性和灾难恢复计划、法律、法规、道德和问题管理等内容。同时,该讲义还强调了实践与理论的结合,为学习者提供了大量的案例分析和实践经验分享,有助于学习者更好地理解和应用所学知识,提高信息安全管理水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值