sql调优之添加索引

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cby1516/article/details/82182756

当数据库单表数据量非常大的时候,使用普通查询耗时非常多,默认会根据搜索条件全表扫描;添加索引后,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度。

添加索引的话,首先去索引列表中查询,而我们的索引列表是B类树的数据结构,查询的时间复杂度为O(log2N),定位到特定值得行就会非常快,所以其查询速度就会非常快。

我们这里有一张表,有67万条数据

CREATE TABLE `contract_accept_detail` (
  `sinoid` varchar(50) NOT NULL COMMENT '本系统唯一标识',
  `contract_id` varchar(50) DEFAULT NULL COMMENT '合同编号',
  `contract_sum` decimal(10,2) DEFAULT NULL COMMENT '合同金额',
  `start_time` datetime DEFAULT NULL COMMENT '合同开始时间',
  `stop_time` datetime DEFAULT NULL COMMENT '合同结束时间',
  `contract_type` char(2) DEFAULT NULL COMMENT '贷款类型(是字典)',
  `guara_type` char(2) DEFAULT NULL COMMENT '贷款形式(是字典)',
  `pay_period` char(2) DEFAULT NULL COMMENT '贷款期数',
  `pay_location` varchar(50) DEFAULT NULL COMMENT '贷款地点(是字典)',
  `contract_status` char(2) DEFAULT NULL COMMENT '债权状态(是字典)',
  `settle_time` datetime DEFAULT NULL COMMENT '结清日期',
  `sinotime` timestamp NULL DEFAULT NULL COMMENT '操作时间',
  PRIMARY KEY (`sinoid`),
  KEY `contract_conId` (`contract_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='合同同意详情表';

此时在没有创建索引的情况下查询指定时间段一次耗时1秒多,生产上的数据量查询一次是4秒多,已经相当慢了

至此考虑需要在查询条件上添加索引,即sinotime

由于本身数据量比较大,添加索引耗时较长,建议建表时就添加

刷新库后再看表信息,已经添加上了

再次执行查询语句

即可发现查询时间大大缩短,差不多0.1秒

若将日期转化为字符串查询,效率一样

这里的sql语句查询时间段使用>=和<=比between and的效率更高!!

展开阅读全文

没有更多推荐了,返回首页