Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
207 views
in Technique[技术] by (71.8m points)

我该如何优化这个句SQL??

有一张快递单号表number,表中有大概5w条数据
每次要使用时取出一条出来,语句如下

SELECT id FROM number WHERE status = 0

status 默认为0待使用 ,1使用中,2已使用
但是每次执行时间超长,大概7秒左右,已给 status 建了索引,但是效果不佳

Explain结果

image.png


更新内容 表结构

CREATE TABLE `number` (
  `id` int(11) NOT NULL,
  `number` varchar(32) NOT NULL,
  `number_code` varchar(64) NOT NULL,
  `order_id` int(11) DEFAULT NULL,
  `oid` varchar(32) DEFAULT NULL,
  `src` varchar(128) NOT NULL,
  `added_user_id` int(11) NOT NULL,
  `added_user_name` varchar(32) NOT NULL,
  `added_date` datetime NOT NULL COMMENT '添加时间',
  `added_ip` varchar(16) NOT NULL COMMENT '添加时的IP',
  `updated_user_id` int(11) DEFAULT NULL COMMENT '更新人id',
  `updated_user_name` varchar(32) DEFAULT NULL,
  `updated_date` datetime DEFAULT NULL,
  `updated_ip` varchar(16) DEFAULT NULL,
  `push_json` text,
  `push_date` datetime DEFAULT NULL,
  `return_json` text,
  `return_retstatus` varchar(256) DEFAULT NULL,
  `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'status 默认为0待使用 ,1使用中,2已使用'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `number`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `oid` (`oid`),
  ADD UNIQUE KEY `order_id` (`order_id`),
  ADD KEY `order_id_2` (`order_id`),
  ADD KEY `status` (`status`);
  
ALTER TABLE `number`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

SELECT id FROM number WHERE status = 0 limit 1,让你的sql快到飞起


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...