【发布时间】:2020-12-16 06:10:31
【问题描述】:
我的工作已切换到新数据库。从 MySQL 5.5.31 到 MariaDB 10.5.4。现在大多数查询速度更快,但一个查询从 0.3 秒变为 1.6 秒。当我尝试对这两个查询进行解释时,我得到了不同的结果。
我需要更改一些设置吗?
查询:
SELECT
aanbieding.id,
aanbieding.uid,
aanbieding.vanprijs,
aanbieding.voorprijs,
aanbieding.opmerking,
aanbieding.aantal,
aanbieding.begindatum,
aanbieding.einddatum,
aanbieding.link,
aanbieding.alleen_online,
aanbieding.alleen_winkel,
aanbieding.ppc_feed_uid,
`aanbieding`.`einddatum` AS `einddatumFormat`,
DATE_FORMAT(
(`aanbieding`.`einddatum`),
'%W %e %M'
) AS `einddatumFormat2`,
DATE_FORMAT(
(`aanbieding`.`begindatum`),
'%W %e %M'
) AS `begindatumFormat2`,
ROUND(
(aanbieding.vanprijs) -(aanbieding.voorprijs),
2
) AS `totalekorting`,
ROUND(
100 *(
(aanbieding.vanprijs) -(aanbieding.voorprijs)
) / aanbieding.vanprijs
) AS `kortingspercentage`,
ROUND(
(aanbieding.voorprijs) /(
inhoud.aantal_liter * aanbieding.aantal
),
2
) AS `prijsperliter`,
merken.name AS merken_name,
merken.name_streep AS merken_name_streep,
inhoud.korte_name AS inhoud_name,
inhoud.name_streep AS inhoud_name_streep,
inhoud.korte_name_meervoud AS inhoud_name_meervoud,
inhoud.aantal_liter,
soort.uid AS soort_uid,
soort.name_streep AS soort_name_streep,
winkel.uid AS winkel_uid,
winkel.name AS winkel_name,
winkel.name_streep AS winkel_name_streep,
winkel.weergeven_aanbieding,
img_verpak.id AS img_verpak_id,
img_verpak.name AS img_verpak_name,
img_verpak.title AS img_verpak_title,
img_verpak.alt AS img_verpak_alt,
img_winkel.id AS img_winkel_id,
img_winkel.name AS img_winkel_name,
img_winkel.title AS img_winkel_title,
img_winkel.alt AS img_winkel_alt,
inhoud_soort.name AS inhoud_soort_name,
inhoud_soort.name_streep AS inhoud_soort_name_streep,
inhoud_soort.uid AS inhoud_soort_uid
FROM
aanbieding
JOIN soort ON aanbieding.`soort__soort_id` = soort.uid AND soort.weergeven = 1 AND soort.deleted = 0
JOIN winkel ON winkel.uid = aanbieding.`winkel__winkel_id` AND winkel.deleted = '0' AND winkel.weergeven = '1'
JOIN merken ON merken.uid = soort.`merken__merken_id` AND merken.deleted = '0' AND merken.weergeven = '1'
JOIN inhoud ON inhoud.uid = soort.`inhoud__inhoud_id` AND inhoud.deleted = '0' AND inhoud.weergeven = '1'
JOIN `fr_images` AS `img_verpak`
ON
`img_verpak`.`table_id_id` = `soort`.`uid` AND img_verpak.image_settings_id = 53 AND img_verpak.deleted = 0 AND img_verpak.position = 1
JOIN `fr_images` AS `img_winkel`
ON
`img_winkel`.`table_id_id` = `winkel`.`uid` AND img_winkel.image_settings_id = 108 AND img_winkel.deleted = 0 AND img_winkel.position = 1
JOIN inhoud_soort ON inhoud_soort.uid = inhoud.`soort__inhoud_soort_id` AND inhoud_soort.deleted = 0 AND inhoud_soort.weergeven = 1
WHERE
aanbieding.deleted = '0' AND aanbieding.weergeven = '1' AND aanbieding.begindatum <= CURDATE() AND(
aanbieding.einddatum >= CURDATE() OR aanbieding.einddatum IS NULL)
【问题讨论】:
-
这是一个格式错误的查询,因为
GROUP BY和SELECT不一致。 -
@GordonLinoff 格式错误的查询是什么意思?
-
服务器配置没有优化 MariaDB 10.5.4。打开分析并发布查询的分析结果。
-
如果你加入的表有很多行,但你只会匹配其中的一小部分,在
FROM中使用子查询会快得多。这可能不适用于您,但可能会有所帮助 - mariadbtutorial.com/mariadb-basics/mariadb-subqueries -
@kelvinnoordenbos 。 . .我解释说:
GROUP BY和SELECT列不一致。SELECT中有来自多个表的无数未聚合列,GROUP BY中只有一列。查询已损坏。
标签: mysql sql phpmyadmin mariadb