Mysql VS MariaDb查询性能相同

时间:2018-03-10 03:55:17

标签: mysql mariadb

我在2台服务器上拥有相同的数据库。一个是Cpanel运行mysql,另外一个是CWP和mariadb。两个数据库都是相同的,表具有相同的索引,mysql变量是相同的但性能不同:

SELECT 
    DISTINCT item_id
FROM                                                        
    site_plugin_products_cache_filters
WHERE
    value_id IN (32)

在MySql上我得到1,939行(1.284秒) 在MaridDb上我得到1,937行(0.097秒)

知道为什么会这样吗?

当我进行子查询时,差异会更大(0.01秒对100秒)

SELECT 
    DISTINCT item_id
FROM                                                        
    site_plugin_products_cache_filters
WHERE
    value_id IN (32) AND
    item_id IN (
        SELECT item_id FROM 
            site_plugin_products_cache_cats
        WHERE
            cat_id=1
    )

或者

SELECT  DISTINCT item_id  FROM site_plugin_products_cache_cats
WHERE cat_id IN (362)  AND item_id != 2519 ORDER BY rand()
LIMIT 4    

4行(0.053 s)vs 4行(0.103 s)

2 个答案:

答案 0 :(得分:0)

似乎WHM / CPanel默认带有query_cache_size = 0,这就是杀死性能。设置为最佳值后,其正常情况:)

答案 1 :(得分:0)

不,将query_cache_size设置为非零值会隐藏实际执行时间。当任何写入表时,将清除QC中的所有条目。突然,查询采用" long"时间而不是任意短暂的时间。

0.01s闻起来像QC时间。 0.097s没有。

您的第一个查询可能会受益于复合INDEX(value_id, item_id)

site_plugin_products_cache_cats可能会受益于INDEX(cat_id, item_id)

MySQL和MariaDB之间存在性能差异的一个非常有效的原因 - 优化器有所不同,特别是在子查询领域。 IN ( SELECT ... )以前的表现非常糟糕。现在两种产品都以不同的方式进行了改进。

为了比较真实的性能,一种技术是SELECT SQL_NO_CACHE ...并运行查询两次。拿时间。 (第一个可能是在进行I / O以填充其他缓存。)