91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQL如何利用索引排序

發布時間:2021-10-27 17:02:12 來源:億速云 閱讀:295 作者:小新 欄目:MySQL數據庫

這篇文章主要為大家展示了“SQL如何利用索引排序”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“SQL如何利用索引排序”這篇文章吧。

近期在做數據庫的慢SQL優化,從數據庫慢日志看到一個SQL執行時間大概1.7s,高峰時候達到十幾秒

mysql> SELECT id, service_seq, order_item_seq, status, order_time_type
    -> , reserve_time, user_name, user_contact, service_address_type, service_address_id
    -> , service_address, service_mode, insured_name, insured_identity, policy_no
    -> , create_time, update_time, over_time, artisan_id, product_id
    -> , user_id, longitude, latitude, refund_status, settle_status
    -> , comment_status, remark, insured_name, insured_identity, is_del
    -> , postpone_status, last_overdue_time, source_from, operator_id
    -> FROM order_service_item
    -> WHERE status = '10'
    -> AND reserve_time BETWEEN '2019-07-10 06:00:00.085' AND '2019-07-10 06:10:00.085'
    -> AND is_del = 0
    -> ORDER BY id DESC;
Empty set (1.77 sec)

執行計劃:

SQL如何利用索引排序

使用了index,但是掃描行數為489300,說明索引效率不高。

查看表結構:

show create table order_service_item;
| order_service_item | CREATE TABLE `order_service_item` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
  `service_seq` varchar(40) COLLATE utf8_bin NOT NULL COMMENT '服務序列號',
  `order_item_seq` varchar(40) COLLATE utf8_bin NOT NULL COMMENT '訂單項序列號',
  `status` varchar(2) COLLATE utf8_bin DEFAULT NULL COMMENT '服務狀態: 00:新訂單 10:等待服務 20:取消處理 30:進行中 40:在路上 50:到達 60:美甲師處理完成 90:用戶處理完成',
  `reserve_time` datetime DEFAULT NULL COMMENT '預約時間',
  `user_name` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '客戶姓名',
  `user_contact` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '客戶聯系電話',
  `service_address_id` varchar(40) COLLATE utf8_bin DEFAULT NULL,
  `service_address` varchar(400) COLLATE utf8_bin DEFAULT NULL COMMENT '服務地址',
  `service_mode` tinyint(2) DEFAULT '0' COMMENT '服務類型:0:普通 1:班課',
  `policy_no` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '保單號',
  `insured_name` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '被保險人姓名',
  `insured_identity` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '被保險人身份證',
  `create_time` datetime NOT NULL COMMENT '建立時間',
  `update_time` datetime NOT NULL COMMENT '更新時間',
  `artisan_id` varchar(40) COLLATE utf8_bin DEFAULT NULL COMMENT '手藝人ID',
  `product_id` varchar(40) COLLATE utf8_bin DEFAULT NULL COMMENT '作品ID',
  `user_id` varchar(40) COLLATE utf8_bin DEFAULT NULL COMMENT '客戶ID',
  `longitude` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '經度',
  `latitude` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '緯度',
  `refund_status` tinyint(2) DEFAULT '0' COMMENT '退款狀態:0 無退款 2 待處理 3 退款請求失敗 4 退款請求成功 5 退款失敗 6 處理完成 8 退款成功',
  `settle_status` tinyint(2) DEFAULT '0' COMMENT '結算狀態',
  `comment_status` tinyint(2) DEFAULT '0' COMMENT '評論狀態 0 未評論 1 已評論',
  `remark` varchar(200) COLLATE utf8_bin DEFAULT NULL COMMENT '備注',
  `last_update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `order_time_type` tinyint(4) DEFAULT NULL COMMENT '服務時間類型\n:0 隨叫隨到\n 1 預約美甲 2 買約分離',
  `service_address_type` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '服務地址類型:home(顧客家), store(獨立手藝人自定義的門店), store_self(門店手藝人所屬門店), studio(原小聚點)',
  `over_time` datetime DEFAULT NULL COMMENT '服務完成時間',
  `is_del` tinyint(1) DEFAULT '0' COMMENT '刪除標記 0 未刪除 1 已刪除',
  `postpone_status` tinyint(2) DEFAULT '0' COMMENT '延期標識:0 未過期 1 已過期 2 延期申請中 3 已延期 4 超期取消 5 拒絕延期',
  `last_overdue_time` datetime DEFAULT NULL COMMENT '最后過期時間',
  `source_from` int(3) DEFAULT NULL COMMENT '20代表套餐預約來的',
  `operator_id` varchar(40) COLLATE utf8_bin DEFAULT NULL COMMENT '具體執行服務的手藝人的ID',
  `verificat_code` varchar(20) COLLATE utf8_bin DEFAULT '' COMMENT '天貓核銷碼',
  PRIMARY KEY (`id`),
  UNIQUE KEY `index_service_seq` (`service_seq`),
  KEY `index_order_item_seq` (`order_item_seq`),
  KEY `index_user_id` (`user_id`),
  KEY `index_artisan_id` (`artisan_id`),
  KEY `index_status` (`status`),
  KEY `index_product_id` (`product_id`),
  KEY `idx_last_update_time` (`last_update_time`),
  KEY `idx_comment_status` (`comment_status`,`status`)
) ENGINE=InnoDB AUTO_INCREMENT=11593152 DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC COMMENT='訂單服務項表' |

針對這個SQL,在status,reserve_time,is_del和id字段創建聯合索引,

alter table order_service_item add index idx_sta_rt_del_id (status,reserve_time,is_del,id);

查看執行計劃:

SQL如何利用索引排序

執行計劃走了新建的聯合索引,并且檢索行數變成了1行。

查看執行時間:

mysql> SELECT id, service_seq, order_item_seq, status, order_time_type
    -> , reserve_time, user_name, user_contact, service_address_type, service_address_id
    -> , service_address, service_mode, insured_name, insured_identity, policy_no
    -> , create_time, update_time, over_time, artisan_id, product_id
    -> , user_id, longitude, latitude, refund_status, settle_status
    -> , comment_status, remark, insured_name, insured_identity, is_del
    -> , postpone_status, last_overdue_time, source_from, operator_id
    -> FROM order_service_item
    -> WHERE status = '10'
    -> AND reserve_time BETWEEN '2019-07-10 06:00:00.085' AND '2019-07-10 06:10:00.085'
    -> AND is_del = 0
    -> ORDER BY id DESC;
Empty set (0.00 sec)

執行時間已經降到了ms級別。

以上是“SQL如何利用索引排序”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節
推薦閱讀:
  1. SQL之索引
  2. SQL 排序

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

sql
AI

清新县| 平顺县| 当涂县| 宜州市| 柳州市| 扶余县| 漳浦县| 建水县| 金溪县| 吐鲁番市| 临桂县| 上饶县| 平凉市| 乌拉特中旗| 涿州市| 津市市| 白银市| 丰镇市| 西丰县| 南靖县| 临沂市| 凤台县| 大庆市| 上犹县| 方正县| 鄂伦春自治旗| 利津县| 厦门市| 晋中市| 都安| 昌宁县| 汤阴县| 永安市| 萨嘎县| 大理市| 沂源县| 平乡县| 无棣县| 永登县| 梧州市| 咸阳市|