最长的MySQL查询最坏情况测试

时间:2017-12-13 22:24:31

标签: mysql performance

我有一个很大的mysql数据库(计划大约有一百万个条目),我想通过创建一个最差的查询(最长的计算时间)来测试它的性能。

现在它是一个包含两个表的数据库:

CREATE TABLE user  (ID BIGINT NOT NULL AUTO_INCREMENT,
                    createdAt DATETIME NULL DEFAULT NULL,
                    lastAction DATETIME NULL DEFAULT NULL,
                    ip TEXT NULL DEFAULT NULL,
                    browser TEXT NULL DEFAULT NULL,
                    PRIMARY KEY (ID))

CREATE TABLE evt  (ID BIGINT AUTO_INCREMENT,
                   UID BIGINT NULL DEFAULT NULL,
                   timeStamp DATETIME NULL DEFAULT NULL,
                   name TEXT NULL DEFAULT NULL,
                   PRIMARY KEY (ID),
                   FOREIGN KEY (UID)
                   REFERENCES user(ID))

它已填充并在本地运行,因此无需连接 是否有关于如何创建可怕查询的拇指规则?

我现在最糟糕的疑问是:

SELECT user.browser, evt.name, count(*) as AmountOfActions
    FROM evt
    JOIN user ON evt.UID = user.ID
    GROUP BY user.browser, evt.name
    ORDER BY AmountOfActions DESC

1 个答案:

答案 0 :(得分:2)

查询中的首要成本是磁盘命中率。因此,创建一个足够大的表,以便它不能缓存在RAM中。和/或进行交叉连接(等),使得中间表太大而无法缓存在RAM中。

这个论坛上的一个常见问题是很多联接,然后是一个分组。或许多连接,加上大中间结果的顺序。

这是一个双重打击 - 在UUID上加入两个表(每个表都太大而无法缓存)。