mysql in 查询优化

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 2014年11月29日21:01:01 场景:有的时候查询数据库的select in 语句中会有非常多不连续的数值,会很影响查询效率 方法:将select in 查询转换成多个select between and 语句 代码:核心代码(id要排过顺序) 1 public fun...

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     }

 

Finger PHP 框架

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
关系型数据库 MySQL 数据库
MySQL索引和查询优化
MySQL索引和查询优化
33 1
|
2月前
|
SQL 缓存 关系型数据库
MySQL技能完整学习列表6、查询优化——3、查询缓存——4、SQL优化技巧
MySQL技能完整学习列表6、查询优化——3、查询缓存——4、SQL优化技巧
63 0
|
2月前
|
存储 SQL 关系型数据库
三高Mysql - Mysql索引和查询优化讲解(偏理论部分)
三高Mysql - Mysql索引和查询优化讲解(偏理论部分)
50 0
|
4月前
|
SQL 缓存 关系型数据库
MySQL调优之关联查询、子查询优化
MySQL调优之关联查询、子查询优化
282 0
|
8月前
|
存储 算法 关系型数据库
第10章 索引优化与查询优化【2.索引及调优篇】【MySQL高级】3
第10章 索引优化与查询优化【2.索引及调优篇】【MySQL高级】3
121 0
|
15天前
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
|
15天前
|
缓存 关系型数据库 MySQL
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
|
15天前
|
存储 关系型数据库 MySQL
MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT *、分页查询的优化、合理使用连接、子查询的优化)(上)
MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT *、分页查询的优化、合理使用连接、子查询的优化)(上)
|
2月前
|
存储 关系型数据库 MySQL
MySQL技能完整学习列表6、查询优化——1、EXPLAIN命令的使用——2、索引优化
MySQL技能完整学习列表6、查询优化——1、EXPLAIN命令的使用——2、索引优化
22 0
|
2月前
|
SQL 算法 关系型数据库
【MySQL】查询优化
【MySQL】查询优化