2014年11月29日21:01:01

场景:有的时候查询数据库的select in 语句中会有非常多不连续的数值,会很影响查询效率

方法:将select in 查询转换成多个select between and 语句

代码:核心代码(id要排过顺序)

     public function group()
{
// $a = array(1,2,3,5,7,8,9);
$a = array(1,3,4,5,7,8,9);
$len = count($a);
$cur = 0; //当前遍历元素的下标
$pre = $a[0]; //前一个元素的值 $new = array('0' => array($a[0]));
for ($i = 1; $i < $len; $i++) {
if (($a[$i] - $pre) == 1 ) {
$new[$cur][] = $a[$i];
} else {
$cur = $i;
$new[$cur][] = $a[$i];
}
$pre = $a[$i];
} print_r($new);
}

//结果

 Array
(
[0] => Array
(
[0] => 1
) [1] => Array
(
[0] => 3
[1] => 4
[2] => 5
) [4] => Array
(
[0] => 7
[1] => 8
[2] => 9
) )

完整代码:

 //select in
//arrData 整数数组,最好是整数
public function select_in($key, $arrData, $fields='')
{
$fields = $fields ? $fields : '*';
sort($arrData);
$len = count($arrData);
$cur = 0;
$pre = $arrData[0]; $new = array('0' => array($arrData[0]));
for ($i = 1; $i < $len; $i++) {
if (($arrData[$i] - $pre) == 1 ) {
$new[$cur][] = $arrData[$i];
} else {
$cur = $i;
$new[$cur][] = $arrData[$i];
}
$pre = $arrData[$i];
} $arrSql = array();
foreach ($new as $v) {
$len = count($v) - 1;
if ($len) {
$s = $v[0];
$e = end($v);
$sql = "(select $fields from {$this->_dt} where $key between $s and $e)";
} else {
$s = $v[0];
$sql = "(select $fields from {$this->_dt} where $key = $s)";
} $arrSql[] = $sql;
} $strUnion = implode(' UNION ALL ', $arrSql);
$res = $this->query($strUnion);
return $this->rstoarray($res);
}

Finger PHP 框架

mysql in 查询优化的更多相关文章

  1. php mysql 一个查询优化的简单例子

    PHP+Mysql是一个最经常使用的黄金搭档,它们俩配合使用,能够发挥出最佳性能,当然,如果配合Apache使用,就更加Perfect了. 因此,需要做好对mysql的查询优化.下面通过一个简单的例子 ...

  2. WebAPI调用笔记 ASP.NET CORE 学习之自定义异常处理 MySQL数据库查询优化建议 .NET操作XML文件之泛型集合的序列化与反序列化 Asp.Net Core 轻松学-多线程之Task快速上手 Asp.Net Core 轻松学-多线程之Task(补充)

    WebAPI调用笔记   前言 即时通信项目中初次调用OA接口遇到了一些问题,因为本人从业后几乎一直做CS端项目,一个简单的WebAPI调用居然浪费了不少时间,特此记录. 接口描述 首先说明一下,基于 ...

  3. MySQL in查询优化

    https://blog.csdn.net/gua___gua/article/details/47401621 MySQL in查询优化<一> 原创 2015年08月10日 17:57: ...

  4. 查询优化 | MySQL慢查询优化

    ​Explain查询:rows,定位性能瓶颈. 只需要一行数据时,使用LIMIT1. 在搜索字段上建立索引. 使用ENUM而非VARCHAR. 选择区分度高的列作为索引. 采用扩展索引,而不是新建索引 ...

  5. MySQL 慢查询优化

    为什么查询速度会慢 1.慢是指一个查询的响应时间长.一个查询的过程: 客户端发送一条查询给服务器 服务器端先检查查询缓存,如果命中了缓存,则立可返回存储在缓存中的结果.否则进入下一个阶段 服务器端进行 ...

  6. MySQL SQL查询优化技巧详解

    MySQL SQL查询优化技巧详解 本文总结了30个mysql千万级大数据SQL查询优化技巧,特别适合大数据里的MYSQL使用. 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 ...

  7. 关于mysql的查询优化

    由于工作原因,最近甲方客户那边多次反应了他们那边的系统查询速度慢,经过排除之后,发现他们那边的数据库完全没有用到索引,简直坑得一笔,通过慢查询日志分析,为数据表建立了适当的索引之后,查询速度明显的提高 ...

  8. 《MySQL慢查询优化》之SQL语句及索引优化

    1.慢查询优化方式 服务器硬件升级优化 Mysql服务器软件优化 数据库表结构优化 SQL语句及索引优化 本文重点关注于SQL语句及索引优化,关于其他优化方式以及索引原理等,请关注本人<MySQ ...

  9. MySQL 的查询优化

    说起 MySQL 的查询优化,相信大家收藏了一堆奇技淫巧:不能使用 SELECT *.不使用 NULL 字段.合理创建索引.为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解它背 ...

  10. MySQL慢查询优化

    MySQL数据库是常见的两个瓶颈是CPU和I/O的瓶颈,CPU在饱和的时候一般发生在大量数据进行比对或聚合时.磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应用分布在网络上,那么查询量相当大的 ...

随机推荐

  1. KPROCESS IDT PEB Ldr 《寒江独钓》内核学习笔记(3)

    继续上一篇(2)未完成的研究,我们接下来学习 KPROCESS这个数据结构. 1. 相关阅读材料 <深入理解计算机系统(原书第2版)> 二. KPROCESS KPROCESS,也叫内核进 ...

  2. mysql语句分析

    explain的每个输出行提供一个表的相关信息,并且每个行包括下面的列: 1,id   select识别符.这是select的查询序列号.2,select_type 可以为一下任何一种类型simple ...

  3. java的static块执行时机

    一.误区:简单认为JAVA静态代码块在类被加载时就会自动执行.证错如下: class MyClass1 { static {//静态块 System.out.println("static  ...

  4. 使用servletAPI三种方式简单示例

    一.直接实现Action接口或集成ActionSupport类(推荐) public class HelloAction implements Action { @Override public St ...

  5. swift项目中引入OC框架

  6. whereis命令

    whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s).如果省略参数,则返回所有信息. 和find相比,whereis查找的速度非 ...

  7. 我的css释疑-float line-height inline-block vertical-align

    markdown的图片和链接格式相类似: [链接文字/图片的alt text] (链接地址/ 图片的地址), 只是图片要在前面加上感叹号! 当内容中含有图片的时候,如果图片的高度大于行高,则含有图片 ...

  8. Matlab的曲线拟合工具箱CFtool使用简介

    http://phylab.fudan.edu.cn/doku.php?id=howtos:matlab:mt1-5 一. 单一变量的曲线逼近Matlab有一个功能强大的曲线拟合工具箱 cftool ...

  9. cc表示Cocos核心,ccs代表CocoStudio,ccui代表CocoStudio的UI控件

    cc表示Cocos核心,ccs代表CocoStudio,ccui代表CocoStudio的UI控件

  10. 教你如何---构建良好的windows程序(初学者必看)

    一使用菜单栏和工具栏 1.菜单栏和工具栏有什么作用和优点: 通过菜单栏把应用程序的功能进行分组,能够方便用户查找和使用,下图所示的菜单栏包含的每一项都是顶层菜单项,顶层菜单项下的选项称为”子菜单”或” ...