SQL 1: 執行時間 0.826秒
SELECT
tenant_id,
o2o_user_id
FROM
crm_point_sync_i2o
WHERE sync_status = 0
AND next_execute_time < NOW()
AND tenant_id IN
(SELECT
tenant_id
FROM
crm_config
WHERE is_enable = 1
AND is_sync = 1)
ORDER BY try_times ASC,
update_time DESC
LIMIT 1000;
SQL2 , 在sql1的基礎上把排序去掉了,按理說,應該更快啊,怎么慢這么多: 執行時間2.212 秒
SELECT
tenant_id,
o2o_user_id
FROM
crm_point_sync_i2o
WHERE sync_status = 0
AND next_execute_time < NOW()
AND tenant_id IN
(SELECT
tenant_id
FROM
crm_config
WHERE is_enable = 1
AND is_sync = 1)
LIMIT 1000
執行計劃如下:
uj5u.com熱心網友回復:
有 LIMIT 1000;
這個改變了取資料的順序,所以不加 ORDER BY 不一定快
uj5u.com熱心網友回復:
不加order by不一定快,那么為啥加了比不加要快很多
uj5u.com熱心網友回復:
而且執行計劃差別那么大
uj5u.com熱心網友回復:
有 LIMIT 1000;
這個改變了取資料的順序,所以不加 ORDER BY 不一定快
不加order by不一定快,那么為啥加了比不加要快很多
而且執行計劃差別那么大
另外,我現在把limit去掉,效果也是一樣,加了order by快很多
uj5u.com熱心網友回復:
不知道發什么神經,看不到圖
說說理論吧
有 ORDER BY 或 LIMIT 都可能導致執行計劃差異,所以效率有差異是正常的,關鍵是看那種情況的執行計劃更符合效率要求
畢竟執行計劃是根據陳述句和表結構、統計資訊評估出來的一種應該最佳的執行方式,但它只是應該,不是絕對
以雖然不加 ORDER BY 應該會快一些,但這并不絕對
uj5u.com熱心網友回復:
不知道發什么神經,看不到圖
說說理論吧
有 ORDER BY 或 LIMIT 都可能導致執行計劃差異,所以效率有差異是正常的,關鍵是看那種情況的執行計劃更符合效率要求
畢竟執行計劃是根據陳述句和表結構、統計資訊評估出來的一種應該最佳的執行方式,但它只是應該,不是絕對
以雖然不加 ORDER BY 應該會快一些,但這并不絕對
**桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......
我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......
關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......