先上两张表在ddl语句(数据库为MySQL):CREATE TABLE `goods_order` (
`GOODS_ORDER_ID` int(12) NOT NULL AUTO_INCREMENT COMMENT '物料订单ID',
`GOODS_ORDER_NO` varchar(50) DEFAULT NULL COMMENT '订单流水号订单类型+组织机构+系统ID+序列',
`SOU_ORGAN_ID` int(12) DEFAULT NULL COMMENT '订单来源组织机构',
`SOU_SYS` int(2) DEFAULT NULL COMMENT '订单来源系统',
`OPR_USER_ID` int(12) DEFAULT NULL COMMENT '订单下单人',
`SERVICE` int(2) DEFAULT NULL COMMENT '订单类型',
`CRT_TIME` datetime DEFAULT NULL COMMENT '下单时间',
`STATUS` varchar(4) DEFAULT NULL COMMENT '订单状态',
`GOODS_ORDER_DESC` varchar(500) DEFAULT NULL COMMENT '订单备注',
`REL_ORDER_ID` varchar(50) DEFAULT NULL COMMENT '关联外部订单ID',
`STORE_IDS` varchar(100) DEFAULT NULL COMMENT '涉及仓库ID',
`IN_STORE_ID` int(12) DEFAULT NULL COMMENT '入库仓库ID',
`OUT_STORE_ID` int(12) DEFAULT NULL COMMENT '出库仓库ID',
`order_id` bigint(20) DEFAULT NULL COMMENT '涉及订单1',
`flow_inst_id` int(11) DEFAULT NULL,
PRIMARY KEY (`GOODS_ORDER_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=3955 DEFAULT CHARSET=utf8;
CREATE TABLE `goods_order_item` (
`GOODS_ORDER_ITEM_ID` int(12) NOT NULL AUTO_INCREMENT COMMENT '订单明细ID',
`GOODS_ORDER_ID` int(12) DEFAULT NULL COMMENT '订单ID',
`SERVICE` int(2) DEFAULT NULL COMMENT '订单类型',
`EQUIPMENT_INST_ID` int(12) DEFAULT NULL COMMENT '物料实例ID',
`PRE_COUNT` float(12,2) DEFAULT NULL,
`REL_COUNT` float(12,2) DEFAULT NULL,
`PRICE` float(12,2) DEFAULT NULL COMMENT '物料单价',
`SUPPLIER_ID` int(12) DEFAULT NULL COMMENT '物料供应商',
`TAR_POSITION_ID` int(12) DEFAULT NULL COMMENT '物料归属位置',
`TAR_SG_REL_ID` int(12) DEFAULT NULL COMMENT '物料归属明细',
`SOU_SG_REL_ID` int(12) DEFAULT NULL COMMENT '物料来源明细',
`USE_USER_ID` int(12) DEFAULT NULL COMMENT '物料领用人',
`RET_USER_ID` int(12) DEFAULT NULL COMMENT '物料归还人',
`EQUIPMENT_AREA_ID` int(12) DEFAULT NULL COMMENT '设备启用位置',
`EQUIPMENT_POSITION` varchar(100) DEFAULT NULL COMMENT '设备启用位置详细',
`EQUIPMENT_AREA_POINT_ID` int(12) DEFAULT NULL COMMENT '启用位置热点',
`HOUSE_ID` int(12) DEFAULT NULL COMMENT '启用房间号(针对于水电煤气仪表类设备)',
`PRE_COUNT2` int(12) DEFAULT NULL COMMENT '新设备预计数量(设备更换使用)',
`REL_COUNT2` int(12) DEFAULT NULL COMMENT '新设备实际数量(设备更换使用)',
`TAR_OPR` int(12) DEFAULT NULL COMMENT '设备清理去处',
`CRT_TIME` datetime DEFAULT NULL COMMENT '下单时间',
`GO_ITEM_DESC` varchar(50) DEFAULT NULL COMMENT '备注',
`initial_price` varchar(10) DEFAULT NULL COMMENT '销售价格',
`deliver_price` varchar(10) DEFAULT NULL COMMENT '标准价格',
`users` varchar(300) DEFAULT NULL,
`SELL_PRICE` varchar(10) DEFAULT '0' COMMENT '销售价格',
PRIMARY KEY (`GOODS_ORDER_ITEM_ID`),
KEY `goods_order_item_index` (`SOU_SG_REL_ID`),
) ENGINE=InnoDB AUTO_INCREMENT=7108 DEFAULT CHARSET=utf8;
1、首先来看一下现在的sql
SELECT * FROM GOODS_ORDER H , GOODS_ORDER_ITEM G
WHERE G.GOODS_ORDER_ID=H.GOODS_ORDER_ID;
执行计划如下执行时间 0.2S
2、alter TABLE goods_order_item add INDEX goods_order_id_index(goods_order_id)
加了一个索引,执行计划变为如下:执行时间为0.4S
我的疑问出来了,为什么加了索引而且rows也明显变少,执行次数应该更少啊,为何执行时间却增加了很多,求大神帮忙解答
`GOODS_ORDER_ID` int(12) NOT NULL AUTO_INCREMENT COMMENT '物料订单ID',
`GOODS_ORDER_NO` varchar(50) DEFAULT NULL COMMENT '订单流水号订单类型+组织机构+系统ID+序列',
`SOU_ORGAN_ID` int(12) DEFAULT NULL COMMENT '订单来源组织机构',
`SOU_SYS` int(2) DEFAULT NULL COMMENT '订单来源系统',
`OPR_USER_ID` int(12) DEFAULT NULL COMMENT '订单下单人',
`SERVICE` int(2) DEFAULT NULL COMMENT '订单类型',
`CRT_TIME` datetime DEFAULT NULL COMMENT '下单时间',
`STATUS` varchar(4) DEFAULT NULL COMMENT '订单状态',
`GOODS_ORDER_DESC` varchar(500) DEFAULT NULL COMMENT '订单备注',
`REL_ORDER_ID` varchar(50) DEFAULT NULL COMMENT '关联外部订单ID',
`STORE_IDS` varchar(100) DEFAULT NULL COMMENT '涉及仓库ID',
`IN_STORE_ID` int(12) DEFAULT NULL COMMENT '入库仓库ID',
`OUT_STORE_ID` int(12) DEFAULT NULL COMMENT '出库仓库ID',
`order_id` bigint(20) DEFAULT NULL COMMENT '涉及订单1',
`flow_inst_id` int(11) DEFAULT NULL,
PRIMARY KEY (`GOODS_ORDER_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=3955 DEFAULT CHARSET=utf8;
CREATE TABLE `goods_order_item` (
`GOODS_ORDER_ITEM_ID` int(12) NOT NULL AUTO_INCREMENT COMMENT '订单明细ID',
`GOODS_ORDER_ID` int(12) DEFAULT NULL COMMENT '订单ID',
`SERVICE` int(2) DEFAULT NULL COMMENT '订单类型',
`EQUIPMENT_INST_ID` int(12) DEFAULT NULL COMMENT '物料实例ID',
`PRE_COUNT` float(12,2) DEFAULT NULL,
`REL_COUNT` float(12,2) DEFAULT NULL,
`PRICE` float(12,2) DEFAULT NULL COMMENT '物料单价',
`SUPPLIER_ID` int(12) DEFAULT NULL COMMENT '物料供应商',
`TAR_POSITION_ID` int(12) DEFAULT NULL COMMENT '物料归属位置',
`TAR_SG_REL_ID` int(12) DEFAULT NULL COMMENT '物料归属明细',
`SOU_SG_REL_ID` int(12) DEFAULT NULL COMMENT '物料来源明细',
`USE_USER_ID` int(12) DEFAULT NULL COMMENT '物料领用人',
`RET_USER_ID` int(12) DEFAULT NULL COMMENT '物料归还人',
`EQUIPMENT_AREA_ID` int(12) DEFAULT NULL COMMENT '设备启用位置',
`EQUIPMENT_POSITION` varchar(100) DEFAULT NULL COMMENT '设备启用位置详细',
`EQUIPMENT_AREA_POINT_ID` int(12) DEFAULT NULL COMMENT '启用位置热点',
`HOUSE_ID` int(12) DEFAULT NULL COMMENT '启用房间号(针对于水电煤气仪表类设备)',
`PRE_COUNT2` int(12) DEFAULT NULL COMMENT '新设备预计数量(设备更换使用)',
`REL_COUNT2` int(12) DEFAULT NULL COMMENT '新设备实际数量(设备更换使用)',
`TAR_OPR` int(12) DEFAULT NULL COMMENT '设备清理去处',
`CRT_TIME` datetime DEFAULT NULL COMMENT '下单时间',
`GO_ITEM_DESC` varchar(50) DEFAULT NULL COMMENT '备注',
`initial_price` varchar(10) DEFAULT NULL COMMENT '销售价格',
`deliver_price` varchar(10) DEFAULT NULL COMMENT '标准价格',
`users` varchar(300) DEFAULT NULL,
`SELL_PRICE` varchar(10) DEFAULT '0' COMMENT '销售价格',
PRIMARY KEY (`GOODS_ORDER_ITEM_ID`),
KEY `goods_order_item_index` (`SOU_SG_REL_ID`),
) ENGINE=InnoDB AUTO_INCREMENT=7108 DEFAULT CHARSET=utf8;
1、首先来看一下现在的sql
SELECT * FROM GOODS_ORDER H , GOODS_ORDER_ITEM G
WHERE G.GOODS_ORDER_ID=H.GOODS_ORDER_ID;
执行计划如下执行时间 0.2S
2、alter TABLE goods_order_item add INDEX goods_order_id_index(goods_order_id)
加了一个索引,执行计划变为如下:执行时间为0.4S
我的疑问出来了,为什么加了索引而且rows也明显变少,执行次数应该更少啊,为何执行时间却增加了很多,求大神帮忙解答
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货