Почему select из sqlx lib выполняется так долго? - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть функция, которая выполняет простой 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 строк.Запрос даже не имеет "соединений" и т. Д. Просто "выберите" с условиями.

Что может быть медленнее?Все время измерялось по умолчанию time.Now () и time.Since ().

В таблице есть следующие столбцы:

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