sql调优之添加索引

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

添加索引的话,首先去索引列表中查询,而我们的索引列表是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的效率更高!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值