mysql 索引实战

mysql 索引实战
之前有个项目,已经充分用MYSQL的调优调了,速度感觉还可以.但发现索引没用上.于是调整之.

    首先,数据库中有date字段,是int类型的,入库时用php的time()入库的,现在的需求是
要求1天之内的记录,我们来看具体的写法,先看原来的
    $query = "select * from record where del<>0 and to_days(FROM_UNIXTIME(date, '%Y-%m-%d %H:%i:%S'))>=to_days(curdate())-1 order by date desc";
这里to_days() 是把时间转成unix的时间,注意,这个表达式用explain看过,用不到索引,主要是由于表达式的左右都有计算.
  再查了资料,其中有例子讲到:
     WHERE TO_DAYS(date_col) - TO_DAYS(CURDATE()) < cutoff
WHERE TO_DAYS(date_col) < cutoff + TO_DAYS(CURDATE())
WHERE date_col < DATE_ADD(CURDATE(), INTERVAL cutoff DAY)

  对于第一行,不会用到索引,因为每个数据行都必须检索以计算出TO_DAYS(date_col)的值。第二行要好一些。Cutoff和TO_DAYS(CURDATE())都是常量,因此在处理查询之前,比较表达式的右边可以被优化器一次性计算出来,而不需要每个数据行都计算一次。但是date_col列仍然出现在函数调用中,它阻止了索引的使用。第三行是这几个中最好的。同样,在执行查询之前,比较表达式的右边可以作为常量一次性计算出来,但是现在它的值是一个日期。这个值可以直接与date_col值进行比较,再也不需要转换成天数了。在这种情况下,会使用索引。

    但是,由于我们这个例子里,是unix时间的,因此有很大不同,想法是表达式的左边和右边都是单一量的比较,这样就肯定用到索引了,
所以一开始打算这样用
     

$time=date("Y/m/d",time()-24*60*60);


$date_time_array=getdate($time);
$hours=$date_time_array[ "hours"];
$minutes=$date_time_array["minutes"];
$seconds=$date_time_array[ "seconds"];
$month=$date_time_array["mon"];
$day=$date_time_array["mday"];
$year=$date_time_array["year"];
// 用mktime()函数重新产生Unix时间戳值
$timestamp = mktime($hours ,$minutes, $seconds,$month ,$day,$year);
echo $timestamp;

    这里实际上就是求出昨天的时间,然后将其转为unix时间,注意我们用了mktime函数.
最后在SQL里,嘿,索引用到了
    $query = "select * from record where del<>0 and date>=".$timestamp." order by date desc";
   但发现,和原来的对比,不能显示昨天0:00后的记录,查了下原因,发现了
原来$time=date("Y/m/d",time()-24*60*60);
  只是根据现在的时间,把时间减去一天,比如现在的时间是18:00,就求出昨天18:00的,不符合要求,
改的话很简单,只需要加上
   


$time=strtotime($time."00:00:00");


$date_time_array=getdate($time);

就可以了,强制是求出昨天0:00的时候的unix时间,再进行比较
结论:通过比较,时间缩短了差不多一半,可见索引的重要性!
   

 

 

posted on 2008-06-22 18:58 jackyrong的世界 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/jackyrong/archive/2008/06/22/1227722.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[html] 你对标签语义化的理解是什么?

[html] 你对标签语义化的理解是什么&#xff1f; 标签语义化的初衷是让正确的标签做正确的事情&#xff0c;但对于人来说&#xff0c;标签的语义除了在 tag 上体现&#xff0c;还可以从 id, class 上体现出来。而每个人对于标签的理解都会存在不同&#xff0c;因此强制规定哪个…

中医移动医疗_中医之极简移动医疗

来源&#xff1a;爱捣鼓网移动医疗是时尚名词。未来也必将初进医疗改革&#xff0c;其也将走进我们每一个人的生活&#xff0c;将来更是我们健康的贴身卫士和高效的个人预警机。移动医疗必将和手机融合。未来的手机不仅仅是娱乐&#xff0c;更是智慧生活的高级助手。现在&#…

编程语言

语言的分类 高级语言&#xff1a;python、Java、PHP...... ----->字节码 低级语言&#xff1a;C、汇编 ----->机器码 区别&#xff1a;高级语言有回收内存的机制&#xff0c;…

[html] 写H5和小程序有什么相同及不同的地方吗?

[html] 写H5和小程序有什么相同及不同的地方吗&#xff1f; 第一条是运行环境的不同。传统的HTML5的运行环境是浏览器&#xff0c;包括webview&#xff0c;而微信小程序的运行环境并非完整的浏览器&#xff0c;大家注意&#xff0c;我这里写的是“非完整的浏览器”&#xff0c…

javascript文字旋转效果

展开 | 隐藏 | 停止 | 旋转 | 改变旋转方向网页特效库背景特效整站模板导航特效时间特效图象特效文本特效代码&#xff1a;<html> <body> <style type"text/css"> BODY { background : #efefef; font : 12px Verdana; } A { color : #e70 } …

python的创始人、特点应用领域_python学习笔记(python发展介绍)

一、python介绍python的创始人为吉多・范罗苏姆(Guido van Rossum)目前python主要应用领域&#xff1a;・云计算・WEB开发・科学运算、人工智能・系统运维・金融&#xff1a;量化交易&#xff0c;金融分析等&#xff0c;作为动态语言的python&#xff0c;语言结构清晰简单&…

kubernetes ui 搭建

1、部署Kubernetes云计算平台&#xff0c;至少准备两台服务器&#xff0c;此处为3台 Kubernetes Master节点&#xff1a;192.168.0.111 Kubernetes Node1节点&#xff1a;192.168.0.112 Kubernetes Node2节点&#xff1a;192.168.0.113 2、每台服务器主机都运行如下命令 system…

[html] 你喜欢哪种布局风格?说说你的理由

[html] 你喜欢哪种布局风格&#xff1f;说说你的理由 flex个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

异常:由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值...

异常:由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值 原因&#xff1a; 如果使用 Response.End、Response.Redirect 或 Server.Transfer 方法&#xff0c;将出现 ThreadAbortException 异常。您可以使用 try-catch 语句捕获此异常。 Response.End 方法终…

[html] 移动端如何让页面强制横屏显示?

[html] 移动端如何让页面强制横屏显示&#xff1f; 说个想法 不一定能实现web端的话 通过判断页面屏幕宽度&#xff08;这个得开陀螺仪权限吧&#xff09; 然后经行div旋转个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷…

多项目加载顺序修改_React推出并发模式:可中断渲染、指定加载顺序、并行处理多状态...

警告&#xff1a;本文档介绍的实验功能在稳定版本中尚不可用。不要在生产应用程序中依赖 React 的实验性构建。这些功能可能会发生重大更改&#xff0c;而且直到功能成为 React 的一部分之前这类更改都不会发出警告。本文档面向早期使用者和对此感兴趣的用户。如果你不熟悉 Rea…

[html] 制作一个多选的下拉框

[html] 制作一个多选的下拉框 定义盒子 a标签 绑定事件个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

好东西仿Vista窗体

这是在网上看到的&#xff0c;然后改了一下&#xff01; 很好调用&#xff01;&#xff01;&#xff01;&#xff01; <SCRIPT src"_Window.js" typetext/javascript></SCRIPT> 窗体类 <SCRIPT src"index.js" typetext/javascript> /…

同步考勤数据 钉钉_作为学校,我为何选择微校wxiao考勤打卡?

随着移动互联网的兴起&#xff0c;越来越多的中小学摒弃了传统纸质考勤方式&#xff0c;采用智能考勤。目前&#xff0c;最常用的智能考勤方式可分为基于非移动端和移动端两种。其中&#xff0c;基于非移动端的包括人脸识别、指纹识别、虹膜识别考勤方式&#xff0c;基于移动端…

Guitar Por如何演奏刮弦

每当我们听到吉他现场演出的时候&#xff0c;看到吉他手在激烈的刮弦时&#xff0c;都觉得很酷&#xff0c;非常有感染力。刮弦在我们弹吉他或编曲时&#xff0c;会经常用到&#xff0c;虽然时间很短&#xff0c;但会为你加分不少。 那么我们应该如何演奏刮弦呢&#xff0c;我们…

[html] HTML全局属性(global attribute)有哪些(包含H5)?

[html] HTML全局属性(global attribute)有哪些&#xff08;包含H5&#xff09;&#xff1f; classiddatatypehrefstylewidthheighttargecheckeddisabledrequierefalttitlenamemulitp...多选valuereplaceholdersrc个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。…

3.6-3.8 分布式环境启动、测试

一、HDFS1、初始化文件系统#master上 [rootmaster hadoop-2.5.0]# pwd /opt/app/hadoop-2.5.0[rootmaster hadoop-2.5.0]# bin/hdfs namenode -format #最后几行看到successfully&#xff0c;代表成功2、启动#启动 [rootmaster hadoop-2.5.0]# sbin/start-dfs.sh集群批量命令…

unity 日志级别_【Unity】通用的Debugger日志模块

usingSystem;usingSystem.IO;namespaceUnityEngine{/// ///系统日志模块/// public classDebugger{public static bool EnableLog; //是否启用日志&#xff0c;仅可控制普通级别的日志的启用与关闭&#xff0c;LogError和LogWarn都是始终启用的。public static bool EnableTime…

[html] html的元素有哪些(包含H5)?

[html] html的元素有哪些&#xff08;包含H5&#xff09;&#xff1f; 块级元素&#xff1a;head -meat - 申明页面的诸多属性title - 窗口标题style - 样式body - 文本内容header - 头部块section - 内容块footer - 底部块article - 文章标签asidenavmenubirhr - 下划线h1-h6…

LINQ - 對付 SQL Injection 的 免費補洞策略 (转)

LINQ - 對付 SQL Injection 的 "免費補洞策略" LINQ - 對付 SQL Injection 的 "免費補洞策略" 作者&#xff1a;黃忠成 一連串的 Mass SQL Injection 攻擊&#xff0c;讓我們回憶起數年前的 SQL Injection 攻擊&#xff0c;多年後的今天&#xff0c;我們仍…