mysql in 查询优化
mysql 优化 查询 in
2023-09-27 14:21:17 时间
2014年11月29日21:01:01
场景:有的时候查询数据库的select in 语句中会有非常多不连续的数值,会很影响查询效率
方法:将select in 查询转换成多个select between and 语句
代码:核心代码(id要排过顺序)
1 public function group() 2 { 3 // $a = array(1,2,3,5,7,8,9); 4 $a = array(1,3,4,5,7,8,9); 5 $len = count($a); 6 $cur = 0; //当前遍历元素的下标 7 $pre = $a[0]; //前一个元素的值 8 9 $new = array('0' => array($a[0])); 10 for ($i = 1; $i < $len; $i++) { 11 if (($a[$i] - $pre) == 1 ) { 12 $new[$cur][] = $a[$i]; 13 } else { 14 $cur = $i; 15 $new[$cur][] = $a[$i]; 16 } 17 $pre = $a[$i]; 18 } 19 20 print_r($new); 21 }
//结果
1 Array 2 ( 3 [0] => Array 4 ( 5 [0] => 1 6 ) 7 8 [1] => Array 9 ( 10 [0] => 3 11 [1] => 4 12 [2] => 5 13 ) 14 15 [4] => Array 16 ( 17 [0] => 7 18 [1] => 8 19 [2] => 9 20 ) 21 22 )
完整代码:
1 //select in 2 //arrData 整数数组,最好是整数 3 public function select_in($key, $arrData, $fields='') 4 { 5 $fields = $fields ? $fields : '*'; 6 sort($arrData); 7 $len = count($arrData); 8 $cur = 0; 9 $pre = $arrData[0]; 10 11 $new = array('0' => array($arrData[0])); 12 for ($i = 1; $i < $len; $i++) { 13 if (($arrData[$i] - $pre) == 1 ) { 14 $new[$cur][] = $arrData[$i]; 15 } else { 16 $cur = $i; 17 $new[$cur][] = $arrData[$i]; 18 } 19 $pre = $arrData[$i]; 20 } 21 22 $arrSql = array(); 23 foreach ($new as $v) { 24 $len = count($v) - 1; 25 if ($len) { 26 $s = $v[0]; 27 $e = end($v); 28 $sql = "(select $fields from {$this->_dt} where $key between $s and $e)"; 29 } else { 30 $s = $v[0]; 31 $sql = "(select $fields from {$this->_dt} where $key = $s)"; 32 } 33 34 $arrSql[] = $sql; 35 } 36 37 $strUnion = implode(' UNION ALL ', $arrSql); 38 $res = $this->query($strUnion); 39 return $this->rstoarray($res); 40 }
相关文章
- 了解MySQL联表查询中的驱动表,优化查询,以小表驱动大表
- mysql left 查询 优化的思考
- 高性能mysql 4,5,6章优化总结
- WebAPI调用笔记 ASP.NET CORE 学习之自定义异常处理 MySQL数据库查询优化建议 .NET操作XML文件之泛型集合的序列化与反序列化 Asp.Net Core 轻松学-多线程之Task快速上手 Asp.Net Core 轻松学-多线程之Task(补充)
- 【MySQL高级】索引优化
- MySQL 大表如何优化查询效率?
- MySQL: 高性能优化实战总结
- mysql数据库优化之表的设计和慢查询定位
- LINUX上MYSQL优化三板斧
- [转]MySQL索引原理及慢查询优化
- 记一次Mysql大数据分页优化问题
- 《深入浅出MySQL:数据库开发、优化与管理维护(第2版)》一一1.4 启动和关闭MySQL服务
- MySQL如何定位并优化慢查询sql
- 转 mysql front安装与使用教程 mysql 工具
- MySql in子句 效率低下优化(亲测有效,从200秒变1秒)
- MySQL优化之强制索引的使用
- MySQL性能优化
- 第一次启动MySQL时报错
- mysql中min和max查询优化
- MySQL 性能优化的最佳20多条经验分享(一)(转)
- mysql性能优化-慢查询分析、优化索引和配置
- Mysql数据库中设置root密码的命令及方法
- MySQL数据库:参数优化
- MySQL优化
- Mysql学习---视图/触发器/存储过程/函数/执行计划/sql优化 180101
- 从最近MySQL的优化工作想到的
- 【MySQL】进阶——一起探究MySQL优化器如何选择索引的奥秘
- SpringBoot+mybatis-plus+mysql实现简单后台管理demo
- MySQL数据库优化技术概述
- MySQL优化之——集群搭建步骤具体解释
- MySql的优化步骤
- 高性能 MySQL(十一):优化特定类型的查询