mysql9索引实战_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时间,再进行比较
结论:通过比较,时间缩短了差不多一半,可见索引的重要性!
mysql9索引实战_mysql 索引实战 | 学步园相关推荐
- mysql索引实战_MySQL索引实战经验总结
MySQL索引对数据检索的性能至关重要,盲目的增加索引不仅不能带来性能的提升,反而会消耗更多的额外资源,本篇总结了一些MySQL索引实战经验. 索引是用于快速查找记录的一种数据结构.索引就像是数据库中 ...
- oracle index include,oracle中与索引相关的视图—all_indexes | 学步园
ALL_INDEXES描述了与索引有关的信息,为了使部分字段的内容更准确,我们需要通过analyze或者dbms_stats包来收集与索引有关的统计信息(这部分字段标记为带*). 首先看一下官网给出的 ...
- 主键需要键索引吗_MySQL 索引的知识点都在这里了,建议收藏!
Java技术栈 www.javastack.cn 关注优质文章 数据库索引,相信大家都不陌生吧. 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息.作为辅助查 ...
- mysql 索引代码_mysql索引
mysql索引的四种类型:主键索引.唯一索引.普通索引和全文索引. 主键索引: 主键是一种唯一性索引,但它必须指定为PRIMARY KEY,每个表只能有一个主键. 唯一索引: 索引列的所有值都只能出现 ...
- mysql普通索引标记_Mysql 索引
1.聚集索引与主键设计 InnoDB是一个聚集索引组织表,即行数据是按照聚集索引在物理磁盘上存储的,并且是块状结构,默认一个block是16kB. 每张InnoDB表只能创建一个聚集索引,聚集索引可以 ...
- mysql多索引结构_MySQL 索引结构
谈到 MYSQL 索引服务端的同学应该是熟悉的不能再熟悉,新建表的时候怎么着都知道先来个主键索引,对于经常查询的列也会加个索引加快查询速度.那么 MYSQL 索引都有哪些类型呢?索引结构是什么样的呢? ...
- mysql的索引优化_MySQL索引优化与分析(重要)
建表SQL CREATE TABLE staffs ( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR (24) NULL DEFAULT '' COM ...
- mysql 索引语法_MySQL 索引:语法及案例剖析
MySQL 索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索 ...
- mysql索引分析_MySQL索引分析和优化
什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面 ...
- mysql 索引查询_mysql索引的建立和查询语句优化
首先表内容展示: # 300W条的模拟数据 # 并且没有建立任何索引 不建立索引的查询时间: 以id查询的(4秒多): 以email查询的(4秒多): 建立主键索引后: alter table s1 ...
最新文章
- 设计模式之外观模式php,php设计模式(十五)外观模式
- red hat关于桥接模式连不上外网或者没有IP
- 一滴油怎样造就了一种健康生活方式?
- 使用NSURLCache 数据缓存
- 上传文件至数据库并下载
- linux cmake编译安装mysql_Linux源码安装MySQL 5.6.12 (Cmake编译)
- 一个独立程序员对自己近九个月工作生活的回顾
- 贺利坚老师汇编课程30笔记:将数据、代码、栈放入不同段
- AcWing 1132. 农场派对(最短路反向建边)
- 新概念模拟电路——初识晶体管
- zendstudio html插件,ZendStudio安装Aptana插件(html,css,js代码提示功能)_html/css_WEB-ITnose...
- NetSetMan NetSetMan IP快速切换
- Airtest 网易 UI 自动化工具 Airtest 浅用记录
- Granger Causality 格兰杰因果关系
- 凿开数据冰层,透出智能时代的光:华为云与开发者的结伴旅行
- 电商后台设计——搜索
- 秋招面经第十一弹:沐瞳科技一面-大数据平台开发工程师
- 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少
- 【Axure视频教程】鼠标滚动切换图片
- QuantFabric量化交易系统开源发布