为什么从sqlx lib中执行select会执行这么长时间?

时间:2018-09-10 13:45:10

标签: database go sqlx

我有一个函数正在执行简单的sqlx.Select(...):

    func filteredEntities(ex sqlx.Ext, baseStmt string, res interface{}, f entities.UserProjectTimeFilter) error {
        finalStmt, args, err := filteredStatement(baseStmt, f)
        if err != nil {
            return err
        }

        err = sqlx.Select(ex, res, finalStmt, args...)
        return errors.Wrap(err, "db query failed")
}

大多数查询进展顺利(10-20毫秒),但其中之一,例如:

"\n\tSELECT * FROM Productivity\n\t WHERE user_id IN (?) AND (tracker_id, project_id) IN ((?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?...

查询是从日志中获取的,未格式化。它执行的时间超过10秒(有时甚至超过20秒)。但是,从数据库的转储中,它执行的时间不到1秒。所选内容少于100行。查询甚至没有“ joins”等。只需简单的“ select”和条件即可。

哪个会比较慢?所有时间均为默认时间time.Now()和time.Since()。

该表包含以下列:

+---------+-------------+---------+-------------+----------+------------+------------+------------+--------+
| id      | planning_id | user_id | activity_id | duration | project_id | tracker_id | created_at | useful |
+---------+-------------+---------+-------------+----------+------------+------------+------------+--------+

0 个答案:

没有答案