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

mysql 索引实战相关推荐

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

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

  2. MySQL索引实战 阿里MySQL规范解读

    五.阿里MySQL规范解读 (一) 建表规约 [强制]表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsigned tinyint(1表示是,0表示否). 说明:任何字段如果为非负 ...

  3. MySQL索引原理与性能调优

    MySQL 应该是最流行的后端数据库,尽管 NOSQL 近几年越来越火爆,可是相信大部分架构师还是会选择 MySQL 来做数据存储. 作为一名Java程序员相信MySQL我们都不陌生,但真的了解MyS ...

  4. MySQL索引优化实战

    在列上进行运算或使用函数会使索引失效,从而进行全表扫描.如下面例子在publish_time,id列上分别加上索引,publish_time为datetime类型,id为int类型 -- 全表扫描 s ...

  5. mysql索引_MySQL索引介绍和实战

    索引是什么 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构. 可以得到索引的本质:索引是数据结构,索引的目的是提高查询效率,可以类比英语新华字典,根据目录定位词 ...

  6. mysql索引linke和等于_MySQL索引介绍和实战

    索引是什么 mysql官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构. 可以得到索引的本质:索引是数据结构,索引的目的是提高查询效率,可以类比英语新华字典,根据目录定位词 ...

  7. 刨根问底:MySQL索引篇之千万级数据实战测试

    今天中午我这边只有半个小时时间,再过半个小时,得带着孩子去我妈那吃饭,就拿我给学生讲的案例,给大家直入主题讲一下吧- MySQL索引创建 先说明一个问题啊,如果你创建数据表时创建了主键,此时主键列会自 ...

  8. 硬干货:深入剖析 MySQL 索引和 SQL 调优实战

    你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 juejin.cn/post/6844903555141206030 推荐:ht ...

  9. MySQL - 索引下推 Index Condition Pushdown 初探

    文章目录 生猛干货 Pre ICP 索引下推的含义 范围查找为啥不行? 搞定MySQL 生猛干货 带你搞定MySQL实战,轻松对应海量业务处理及高并发需求,从容应对大场面试 Pre MySQL - 索 ...

最新文章

  1. 解决Jira和Confluence访问打开越来越缓慢问题
  2. git merge git pull时候遇到冲突解决办法git stash
  3. JAVA学习篇--Servlet详解
  4. 开发chrome插件(扩展)
  5. java ee ide 假死_Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
  6. oracle数据库查看size,[oracle] 查看oracle数据库表空间使用率,定位数据size较大对象...
  7. 2018 ICPC Asia Jakarta Regional Contest
  8. COG云原生优化遥感影像,瓦片切分的应用实践
  9. 苹果发布iOS 13.2测试版 iPhone 11拍照更牛了
  10. Anaconda使用pyinstaller打包exe程序体积过大
  11. JAVA 基于websocket实时通信的实现—GoEasy
  12. 事故记录-过多进程致使CPU卡死
  13. Python大数据处理方案
  14. php聊天室系统,PHP教程实例:用PHP打造动态聊天室系统
  15. c语言根据日期求星期蔡勒公式,利用蔡勒公式获得给定日期的星期数
  16. Tool-图片压缩-腾讯智图:腾讯智图
  17. m3u8 视频下载 ——M3U8 GETTER 批量下载版 使用说明
  18. 最全大数据就业前景分析!此篇文章给你答案
  19. 淘宝UWP PC版邀请码已经发放给了前20名申请的博友。请在你们的博客园私信里查收。...
  20. 【校招VIP】产品项目分析之优势或不足

热门文章

  1. openstack服务编排
  2. 使用Rancher搭建K8S测试环境
  3. object-c 日志
  4. 通过一个简单例子理解 RecyclerView.ItemDecoration
  5. Exchange server 2010系列教程之三 发送邮件测试
  6. 新Rider预览版发布,对F#的支持是亮点
  7. 登录时记住用户名和密码及cookie案例应用
  8. 分享SharpZipLip使用代码
  9. 探索性数据分析(EDA)-不要问如何,不要问什么
  10. 西工大java实验报告给,西工大数字集成电路实验 实验课6 加法器的设计