php in_array 遍历,in_array大数组查询性能问题
问题
最近在实现一个项目接口的时候发现当数组过大的时候,数据返回的速度有点慢。接口数据返回最长反应时间2s,经过反复调试发现代码段耗时最长的部分在in_array()函数。
解决过程
在stackoverflow找到了一篇提供我解决思路的文章
- which is faster, array_key_exists or array_search?
文中说到:array_key_exists is much faster. array_search must traverse the whole array, so it is O(n). array_key_exists is a hash table lookup, so it is O(1).
----分割线----I think it’s faster for PHP to check for keys (array_key_exists() or simply isset($array[$key])). To search for a value, PHP must cycle through the array; to search for a key PHP will use a hash function.
该数组是用来保存用户账号,一直不销毁存储在内存。
原数组
$array=array('account1','account2','$account3');
修改后的数组
$array=array('account1'=>0,'account2'=>0,'$account3'=>0)
使用isset($array[$account])) 来检测账号是否存在该数组内
总结
由于in_array()函数对数组进行遍历查询,O(n),随n(数组长度)的增大耗时将增加。所以在对大数组使用in_array()函数应考虑效率问题。当面对大数组查询的时候,在PHP中应该尽量采用key查询而不是value查询。').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('
').text(i));
};
$numbering.fadeIn(1700);
});
});
以上就介绍了in_array大数组查询性能问题,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
php in_array 遍历,in_array大数组查询性能问题的更多相关文章
- PHP性能优化:in_array和isset 在大数组查询中耗时相差巨大,以及巧妙使用array_flip
今天在PHP业务开发中,发现了一个问题. 两个较大数组(20万+元素),遍历其中一个$a,另一个数组$b用于查找元素. 比如 foreach($a as $val){ if(in_array($xx, ...
- php array 根据value获取key,in_array()判断是否在数组内实例
php array 根据value获取key,in_array()判断是否在数组内实例 <?php header("Content-type: text/html; charset=u ...
- Trie树-提高海量数据的模糊查询性能
今天这篇文章源于上周在工作中解决的一个实际问题,它是个比较普遍的问题,无论做什么开发,估计都有遇到过.具体是这样的,我们有一份高校的名单(2657个),需要从海量的文章标题中找到包含这些高校的标题,其 ...
- 高性能MySQL笔记 第6章 查询性能优化
6.1 为什么查询速度会慢 查询的生命周期大致可按照顺序来看:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端.其中“执行”可以认为是整个生命周期中最重要的阶段. ...
- 从无重复大数组找TOP N元素的最优解说起
有一类面试题,既可以考察工程师算法.也可以兼顾实践应用.甚至创新思维,这些题目便是好的题目,有区分度表现为可以有一般解,也可以有最优解.最近就发现了一个这样的好题目,拿出来晒一晒. 1 题目 原文: ...
- SQL Server查询性能优化——堆表、碎片与索引(二)
本文是对 SQL Server查询性能优化——堆表.碎片与索引(一)的一些总结. 第一:先对 SQL Server查询性能优化——堆表.碎片与索引(一)中的例一的SET STATISTICS IO之 ...
- Redis 优化查询性能
一次使用 Redis 优化查询性能的实践 应用背景 有一个应用需要上传一组ID到服务器来查询这些ID所对应的数据,数据库中存储的数据量是7千万,每次上传的ID数量一般都是几百至上千数量级别. 以前 ...
- MySql学习(七) —— 查询性能优化 深入理解MySql如何执行查询
本篇深入了解查询优化和服务器的内部机制,了解MySql如何执行特定查询,从中也可以知道如何更改查询执行计划,当我们深入理解MySql如何真正地执行查询,明白高效和低效的真正含义,在实际应用中就能扬长避 ...
- C# 快速释放内存的大数组
本文告诉大家如何使用 Marshal 做出可以快速释放内存的大数组. 最近在做 3D ,需要不断申请一段大内存数组,然后就释放他,但是 C# 对于大内存不是立刻释放,所以就存在一定的性能问题. 在博客 ...
- SQl语句查询性能优化
[摘要]本文从DBMS的查询优化器对SQL查询语句进行性能优化的角度出发,结合数据库理论,从查询表达式及其多种查询条件组合对数据库查询性能优化进行分析,总结出多种提高数据库查询性能优化策略,介绍索引的 ...
随机推荐
- 3.17阿里Java后端,电商 sku 的全排列算法
3.17阿里Java后端 字典 有英文字典:Map<Character, String[]>,示例如下: a : [a, an] b : [bus, bird] c : [car, can ...
- CSS选择符及盒模型
一.选择符 1.类型选择符(标签选择符) 特点:能选中当前结构里面(全部同名)标签. 应用:统一某一标签样式时或清除某一标签默认样式时. 2.id选择符 特点:(唯一性!)在同一个页面里面,一个id名 ...
- Esp32 arduino 编译报 hwcrypto/aes.h: No such file or directory 错误
由于hwcrypto/* 在新版中移动到了 esp32/*. 编译会出现hwcrypto/aes.h: No such file or directory 的错误 解决方案如下: arduino 中E ...
- MySql 自动设置时间(自动获取时间,填充时间)
应用场景: 1.在数据表中,要记录每条数据是什么时候创建的,不需要应用程序去特意记录,而由数据数据库获取当前时间自动记录创建时间: 2.在数据库中,要记录每条数据是什么时候修改的,不需要应用程序去特意 ...
- Ubuntu系统update时提示源不安全被禁用的一种解决办法
参考自这篇文章Ubuntu系统update时提示源不安全被禁用 - 知乎 (zhihu.com). 安装好Ubuntu18.04并更换清华源后,在运行 sudo apt update 更新源时报错如下 ...
- angular-gridster2使用
1.安装:npm install angular-gridster2 --save 2.引入 3.html代码 <div id="fullscreen" style=&quo ...
- 记一次线上DB被打挂
这周刚新上了需求,在慢慢写代码的时候,突然报警群的消息多了,组长让我看看咋回事. 一开始没当回事,因为faas任务的错误日志一直很多,但是发现新的日志和以前大不相同,显示的是上游faas实例的连接被m ...
- js 获取鼠标位置的两种方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- BubbleSort,冒泡排序,C++非递归和递归实现
1 // g++ bubble_sort.cc -Wall -O3 && ./a.exe 2 3 4 #include <iostream> 5 #include < ...
- 禁止的回文子串 Dyslexic Gollum
UVA1633 一个长的回文串都可以由短的回文串拓展而来,只要短的回文在左右两端增加相同的字符即可.因此,在考虑长度为NNN的01串时,只要在从长度为1向NNN拓展的过程中,保证后KKK个字符不是回文 ...