效率

MySQL 随机取数据效率问题

南笙酒味 提交于 2019-12-01 21:28:58
最近由于需要大概研究了一下MYSQL的随机抽取实现方法。举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1。 但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描。但是在MYSQL 3.23版本中,仍然可以通过ORDER BY RAND()来实现随机。 但是真正测试一下才发现这样效率非常低。一个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 MAX(id) FROM `table`)) AS id) AS t2

Java List去重以及效率分析

蹲街弑〆低调 提交于 2019-12-01 20:00:58
List去重无非几种方法: 下面文章提供的两种: https://blog.csdn.net/u012156163/article/details/78338574 , 以及使用List.stream.distinct()。 文章中还提到了HashSet和linkHashSet,而且测试结果linkHashSet居然比hashSet还快,想了很久感觉linkedHashSet怎么可能快于hashSet, 另外网上也没有针对distinct方法的效率分析,遂自己写了个测试程序测试了下: 数据量1w,碰撞率1/10,hashset基本是1毫秒,linkedHashSet是1-2毫秒,distinct是60毫秒左右 数据量1w,碰撞率1/100,hashset基本是1-2毫秒,linkedHashSet是8-10毫秒,distinct是100毫秒左右 数据量10w时,碰撞率1/10, hashset 23毫秒,linkedHashSet是39毫秒,distinct 68毫秒。 数据量10w时,碰撞率1/100, hashset 6毫秒,linkedHashSet是11毫秒,distinct 53毫秒。 数据量100w时,碰撞率1/10, hashset 242毫秒,linkedHashSet 288毫秒,distinct 230毫秒左右。另外多次测试发现三者不相上下

Seata为什么效率高

泪湿孤枕 提交于 2019-12-01 11:48:39
1. Seata为什么效率高 1.1. 应对面试官的解释 Seata的解决方案是两阶段提交的升级版,传统两阶段提交资源管理器(RM)放在数据库端,由数据库管理,需要数据库支持XA协议。 而Seata把RM从数据库端以jar包的形式移到了应用端,剥离了数据库对XA协议的要求。 Seata认为我们对数据库的提交操作90%以上都是成功的,所以我们可以节省XA协议锁定资源的时间,应用层执行完直接提交就可以释放锁,如果出错需要回滚则锁定到回滚完成 所以Seata减少了事务对资源的锁定时间,提高了并发和吞吐量 1.2. Seata的具体使用例子 参考: https://juejin.im/post/5d7838d65188254917372a69 或直接查看 官网github 来源: https://www.cnblogs.com/sky-chen/p/11683979.html

单行函数遇到null和count的效率

谁说胖子不能爱 提交于 2019-12-01 09:07:15
之前讲过和NULL做加法结果一定是null。 当你的一个表里的数据类型为int的字段里存在null的时候,用sum方法,这个时候结果不会是null。 这说明了sum函数会自动过滤掉内容为null的记录。 同理,avg() ,max() ,min()也一样会过滤null。 count函数的详细介绍 select count(salary) from employees; 这条语句会返回有salary的记录数量。但是如果用这个语句来获取总的记录数量是不稳定的 select count(*) from employees; 这条语句是只要一条记录中,有一个字段有值,那么count就会+1,比上面那句稳定很多。 select count(1) from employees; 这条语句的意思是,给每条记录都加一个字段,值为1,稳定性最高,一定会返回正确数量。 括号里的 1 可以填随意的数字或者字符。 效率 MYISAM存储引擎下, count(*) 效率最高,因为这个存储引擎内部有一个计数器,直接就会返回。 INNODB存储引擎下, count(*) 和 count(1)的效率差不多,比count(字段)高。 来源: https://www.cnblogs.com/chanyuli/p/11674942.html

如何提高程序员键盘使用效率

放肆的年华 提交于 2019-12-01 07:11:06
前言 :在多媒体技术高度发达的现代社会,人们使用各种各样的智能终端随时随地获取,或是传递信息,而计算机无疑是绝大部分人都会使用的设备,尤其对于程序员来说,计算机可以说是形影不离的好伙伴, 因此,如何提高计算机的使用效率是一个值得考量的问题,其中,最主要的部分就是如何提高键盘这一输入设备的使用效率,在不更换编程形式的前提下,它与程序员的编程效率息息相关。 1、程序员使用键盘的常用技能 1.1输入速度 关于提高输入效率,首当其冲的自然是输入速度,快速的输入最能显著地提高代码编写的效率,而提高键盘输入速度,最好的方法就是多练,所谓熟能生巧,在反复多次的练习后,方能 掌握键盘的布局,逐渐从看着键盘输入过渡到能够熟练盲打。如今,市面上已经有多款练习打字的软件,后文我将给出相关推荐。 此外,程序员所熟悉的编程语言几乎都以英文描述,这与长期输入中文的我们习惯不符,因此打字练习应当多以英文练习为主,平时若用到参考代码片段,在时间允许的情况下尽量自已输入代码,这样 既能练到输入速度,也能够大致阅览一遍代码,一举两得。 1.2快捷键 各个操作系统都会提供大量快捷键供用户使用,掌握这些快捷键的使用同样能够使程序员的工作事半功倍。 以下列举windows系统中的部分快捷键: CTRL组合键 功能 Ctrl + A 全选 Ctrl + B 整理收藏夹 Ctrl + C 复制 Ctrl + D 删除/添加收藏

为什么程序员的工作效率跟工资不成比例!

狂风中的少年 提交于 2019-12-01 02:48:48
最有效率的程序员会比一般的程序员的编程效率高上几个数量级。但在任何公司里,他们的工资水平却只会出现很小的浮动差距。   甚至在整个行业内,这种差距也不是很大。如果一个程序员的效率能达到其他人的10倍,为什么他不能得到10倍高的报酬呢? Joel Spolsky在他的一个演讲里 就这个问题给出了一系列的答案。首先,程序员的工作效率在整个行业内千差万别,但在一个公司里却不会有太大的差距。如果一个人比他的同事的效率高10倍, 那他基本上会离开,要么去找更有天赋的人一起工作,要么去创业开公司。第二,极高的工作效率并没有被察觉。这篇文章我们主要讨论这第二种情况。   一个人的工作效率比同伴高10倍怎么可能不被察觉呢?在某些行业里,这种差别是显而易见的。一个销售人员的效率是他的同伴的10倍,这很容易看出来,而且 他也能得到相应的报酬。销售成绩容易测量,就比如有些销售人员销售额会是其他人的数十倍。一个泥瓦匠的工作效率是其同伴的10倍,这也很容易看 出,但这种事情不会发生:最好的泥瓦匠也不可能比一个一般的泥瓦匠快10倍。软件的产出不可能像销售或砌砖那样容易的测量。最好的程序员并不是能写10倍 多的代码,他们也不是能多干10倍多小时的工作。   程序员在避免写代码时才体现出最高的效率。他们能认识到人们要求他们解决的问题并不需要解决,他们能知道客户并不清楚自己想要的东西是什么

【前端工程师】 性能和效率 优化的问题

寵の児 提交于 2019-11-30 21:13:26
性能和效率 一、 你平时如何评测你写的前端代码的性能和效率。 ChromeDevTools 的 Timeline : 是用来排查应用性能瓶颈的最佳工具。 ChromeDevTools 的 Audits: 对页面性能进行检测,根据测试的结果进行优化。 第三方工具 Yslow 。 详细参见: http :// www . cnblogs . com / — simon / p /5883336 .html http :// blog . csdn . net / ivan 0609/ artide / details /45508365 http :// www . wtoutiao . com / p /1305 TZW.html 二、 如何优化页面,加快页面的加载速度 ( 至少 5 条 ) (1) 优化图片资源的格式和大小 (2) 开启网络压缩 (3) 使用浏览器缓存 (4) 减少重定向请求 (5) 使用 CDN 存储静态资源 (6) 减少 DNS 查询次数 (7) 压缩 css 和 js 内容 详细参见: http :// www . mahaixiang . cn / wyzz /1589 .html 三、 怎么保证多人开发进行内存泄漏的检查(内存分析 工具) 1) 使用 xcode 里面的 Analyze 进行静态分析 build setting ---- 》 automa

【C++】STL各容器的实现,时间复杂度,适用情况分析

北战南征 提交于 2019-11-30 19:03:47
一.vector 1.概述 动态数组,在内存中具有连续的储存空间,在堆上分配内存,支持快速随机访问,在中间插入和删除慢,但在末尾插入和删除快 2.特点 1)拥有一段连续的内存空间,并且起始地址不变,因此 能非常好的支持随机存取 ,但由于其内存空间是连续的,所以 在中间插入和删除会造成内存块的拷贝 ,另外,当该数组的内存空间不够时, 需要重新申请一块足够大的内存并进行内存拷贝 ,这些都大大的影响了vector的效率 2) 对头部和中间的元素进行插入删除需要移动内存 ,如果元素是结构体或者类,那么移动时还会进行 析构和构造 操作,所以性能不高 3) 对末尾的元素的操作最快 ,此时一般不需要移动内存,只有剩余内存不够时才需要 3.时间复杂度分析: 头部插入删除:O(N) 尾部插入删除:O(1) 中间插入删除:O(N) 查找:O(N) 4.优缺点及适用场景 优点:支持随机储存,查询效率高 缺点:在头部和中间插入删除元素效率低,需要移动内存 适用场景:适用于元素结构简单,变化小,并且频繁随机访问的场景 5.结论 vector常用来保存需要经常进行随机访问的内容,并且不需要对中间元素进行添加和删除操作 二.双向队列deque 1.概述 deque是 double ended queue 的缩写,是一个动态数组,可以向两端发展(双向开口的连续线性空间),因此无论在头部或者尾部安插元素都十分迅速

散列表(哈希表)

混江龙づ霸主 提交于 2019-11-30 13:23:45
散列表(哈希表) 散列表是根据键(KEY)来直接访问内存存储位置的一种数据结构,它通过散列函数计算键值对中键(KEY)的散列地址,然后将值存在此地址上,这样就可以直接根据键来取得所对应的值。 散列函数的冲突 对于不同的键(KEY),散列函数得到同一个散列地址,这种现象称为冲突。 如何处理散列冲突 开放定址法 线性探测法:就是一旦冲突了就放到下一个位置就好了,只要存储空间够大总会有位置放的(但是这样会产生堆积,因为他可能会把其他的原来属于别人的位置只是暂时空着的给占了) 二次探测法:冲突了就放在1或者2或者3等等的平方后的位置,而不是像前面那样就是单纯的不停地加1,这样就可以不让关键字对集中在一块地方 伪随机探测法:用一个种子产生一个随机数来作为位移量来避免冲突,然后最后查找这个数在不在的时候也用这个种子生成随机数来找 当散列表存在"堆积"(在函数地址的表中,散列函数的结果不均匀地占据表的单元,形成区块)的情况时,使用开放定址法的效率大大降低,此时不能再使用开放定址法 单链表法:将散列地址值一样的键值对保存在一个链表中。 再散列:在上次散列计算发生冲突时,利用该次冲突的散列函数地址产生新的散列函数地址,直到冲突不再发生。这种方法不易产生"堆积",但增加了计算时间。 公共溢出区:将所有冲突的键值对放在一个数组中。查找时如果在散列表中没有找到就在数组中顺序查找。 散列表的查找效率