簡體   English   中英

從 MySQL 5.7 遷移到 MARIADB 10.6 后查詢慢。 執行計划指標問題

[英]Slow query after migrating from MySQL 5.7 to MARIADB 10.6. Execution plan index problem

我們希望將 LAMP 服務器從 MySQL 5.7 遷移到 MariaDB 10.6。 我們克隆了服務器,安裝了 MariaDB 並遷移了數據庫。 我期待 SQL 查詢的速度有所提高,但令我驚訝的是,我們的應用程序使用 MariaDB 時速度較慢。 我正在嘗試分析一些查詢,我向您展示一個具體案例。

我們有一個在許多其他查詢中使用的 VIEW,如下所示:

ALTER ALGORITHM = MERGE DEFINER=`root`@`%` SQL SECURITY DEFINER VIEW `GT_VWCalendariProfessionalInc` AS
   SELECT cpInc.prof, cpInc.start_date, cpInc.end_date
   FROM GT_CalendariProfessional cpInc
   JOIN CTR_Motius ON cpInc.colA = CTR_Motius.colA
   WHERE cpInc.necessitat IS NULL AND ...

cpInc 表中的關鍵索引:ix_necessitat (column necessitat), ix_professional (column prof), ix_outerjoin_nec_dates (columns necessitat, start_date, end_date)

使用 MySQL 的外部查詢視圖比使用 MariaDB 更快。 查詢是這樣的:

SELECT kal.prof, kal.start_date, kal.end_date
FROM GT_CalendariProfessional kal
LEFT JOIN GT_VWCalendariProfessionalInc AS cpInc ON cpInc.prof = kal.prof AND kal.start_date < cpInc.end_date AND cpInc.start_date < kal.end_date
WHERE kal.prof=3143 AND kal.start_date BETWEEN '2021-01-01 00:00' AND '2022-01-01 00:00'

通過 EXPLAIN,我看到 MariaDB 使用的索引效率低下(ix_professional)。 我不能在視圖中強制索引,因為我們在具有不同執行計划的其他查詢中使用視圖,並且這里的索引效率低下可能是其他查詢中最好的。

MySQL(快速)的執行計划: MySQL的執行計划(快速)

MariaDB的執行計划(慢): MariaDB 的執行計划(慢)

通常,使用 MariaDB 的許多查詢比使用 MySQL 的查詢要慢

首先,讓我們添加這些索引; 他們可能會加快這兩個版本:

kal:  INDEX(prof, start_date,  end_date)
cpInc:  INDEX(prof, end_date, start_date)
cpInc:  INDEX(prof, start_date, end_date)

並刪除僅(prof)上的當前索引

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM