之前有个项目,已经充分用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时间,再进行比较

结论:通过比较,时间缩短了差不多一半,可见索引的重要性!

mysql9索引实战_mysql 索引实战 | 学步园相关推荐

  1. mysql索引实战_MySQL索引实战经验总结

    MySQL索引对数据检索的性能至关重要,盲目的增加索引不仅不能带来性能的提升,反而会消耗更多的额外资源,本篇总结了一些MySQL索引实战经验. 索引是用于快速查找记录的一种数据结构.索引就像是数据库中 ...

  2. oracle index include,oracle中与索引相关的视图—all_indexes | 学步园

    ALL_INDEXES描述了与索引有关的信息,为了使部分字段的内容更准确,我们需要通过analyze或者dbms_stats包来收集与索引有关的统计信息(这部分字段标记为带*). 首先看一下官网给出的 ...

  3. 主键需要键索引吗_MySQL 索引的知识点都在这里了,建议收藏!

    Java技术栈 www.javastack.cn 关注优质文章 数据库索引,相信大家都不陌生吧. 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息.作为辅助查 ...

  4. mysql 索引代码_mysql索引

    mysql索引的四种类型:主键索引.唯一索引.普通索引和全文索引. 主键索引: 主键是一种唯一性索引,但它必须指定为PRIMARY KEY,每个表只能有一个主键. 唯一索引: 索引列的所有值都只能出现 ...

  5. mysql普通索引标记_Mysql 索引

    1.聚集索引与主键设计 InnoDB是一个聚集索引组织表,即行数据是按照聚集索引在物理磁盘上存储的,并且是块状结构,默认一个block是16kB. 每张InnoDB表只能创建一个聚集索引,聚集索引可以 ...

  6. mysql多索引结构_MySQL 索引结构

    谈到 MYSQL 索引服务端的同学应该是熟悉的不能再熟悉,新建表的时候怎么着都知道先来个主键索引,对于经常查询的列也会加个索引加快查询速度.那么 MYSQL 索引都有哪些类型呢?索引结构是什么样的呢? ...

  7. mysql的索引优化_MySQL索引优化与分析(重要)

    建表SQL CREATE TABLE staffs ( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR (24) NULL DEFAULT '' COM ...

  8. mysql 索引语法_MySQL 索引:语法及案例剖析

    MySQL 索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索 ...

  9. mysql索引分析_MySQL索引分析和优化

    什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面 ...

  10. mysql 索引查询_mysql索引的建立和查询语句优化

    首先表内容展示: # 300W条的模拟数据 # 并且没有建立任何索引 不建立索引的查询时间: 以id查询的(4秒多): 以email查询的(4秒多): 建立主键索引后: alter table s1 ...

最新文章

  1. 设计模式之外观模式php,php设计模式(十五)外观模式
  2. red hat关于桥接模式连不上外网或者没有IP
  3. 一滴油怎样造就了一种健康生活方式?
  4. 使用NSURLCache 数据缓存
  5. 上传文件至数据库并下载
  6. linux cmake编译安装mysql_Linux源码安装MySQL 5.6.12 (Cmake编译)
  7. 一个独立程序员对自己近九个月工作生活的回顾
  8. 贺利坚老师汇编课程30笔记:将数据、代码、栈放入不同段
  9. AcWing 1132. 农场派对(最短路反向建边)
  10. 新概念模拟电路——初识晶体管
  11. zendstudio html插件,ZendStudio安装Aptana插件(html,css,js代码提示功能)_html/css_WEB-ITnose...
  12. NetSetMan NetSetMan IP快速切换
  13. Airtest 网易 UI 自动化工具 Airtest 浅用记录
  14. Granger Causality 格兰杰因果关系
  15. 凿开数据冰层,透出智能时代的光:华为云与开发者的结伴旅行
  16. 电商后台设计——搜索
  17. 秋招面经第十一弹:沐瞳科技一面-大数据平台开发工程师
  18. 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少
  19. 【Axure视频教程】鼠标滚动切换图片
  20. QuantFabric量化交易系统开源发布

热门文章

  1. Slax Linux安装——备忘篇
  2. 寻找一个字符串中所有重复字符的索引
  3. 低开销、简单的网站监控工具Checkless开发者专访
  4. 基于ffmpeg和libvlc的视频剪辑、播放器
  5. 微服务API模拟框架frock介绍
  6. 进入Linux救援(rescue)模式的四大法门
  7. Golang源码探索(一) 编译和调试源码
  8. 美国智能家居止步不前 原因是产品过于碎片化
  9. java中异常和集合
  10. 如果再不要求进步,那么你就是下一个陨落的巨头