MySQL - предложение ORDER BY, заставляющее SQL_CALC_FOUND_ROWS выбрать не возвращать данные - PullRequest
1 голос
/ 07 мая 2019

Я использую MySQL 5.6 на блоке centos 6 (mysql Ver 14.14 Distrib 5.6.44, для Linux (i686) с использованием оболочки EditLine)

У меня есть запрос с несколькими внутренними объединениями.Я обнаружил, что при использовании предложения ORDER BY с SQL_CALC_FOUND_ROWS данные не возвращаются.Запрос говорит «ок» для сообщения, и у меня есть продолжительность, сколько времени запрос занял - но ничего не возвращается.

Если я удаляю «SQL_CALC_FOUND_ROWS», то я получаю свои строки.Внутри MySQL верстак я вижу длительность, но при времени «выборки» он даже не пытается извлечь.

Запрос:

SELECT SQL_CALC_FOUND_ROWS
    l.id AS licensee_id,
    l.agency_id,
    l.licensee_fname,
    l.licensee_name,
    l.licensee_lname,
    l.licensee_email,
    licensee_certs.cert_number,
    agency.agency_name,
    licensee_cert_types.cert_name,
    licensee_certs.cert_issue_date AS approval_timestamp,
    licensee_certs.cert_issue_date AS issue_timestamp,
    licensee_certs.cert_expiration_date AS expire_timestamp,
    licensee_certs.cert_status AS licensee_status,
    licensee_certs.cert_status,
    (licensee_certs.cert_expiration_date - UNIX_TIMESTAMP()) AS days_remaining,
    h_cache.acquired AS total_hours,
    h_cache.pending AS pending_hours,
    CONCAT(IFNULL(licensee_cert_types.cert_name, ''),
            ' ',
            IFNULL(licensee_certs.cert_number, ''),
            ' ',
            IFNULL(licensee_certs.cert_status, ''),
            ' ',
            IFNULL(l.licensee_fname, ''),
            ' ',
            IFNULL(l.licensee_lname, ''),
            ' ',
            IFNULL(l.licensee_email, ''),
            ' ',
            IFNULL(agency.agency_name, ''),
            ' ',
            IFNULL(agency.agency_abbr, '')) AS search
FROM
    licensee AS l
        LEFT JOIN
    licensee_certs ON l.id = licensee_certs.licensee_id
        AND licensee_certs.agency_id = l.agency_id
        LEFT JOIN
    agency ON agency.id = l.agency_id
        LEFT JOIN
    licensee_cert_hour_cache AS h_cache ON h_cache.licensee_id = l.id
        AND h_cache.agency_id = l.agency_id
        AND h_cache.licensee_cert_type_id = licensee_certs.cert_type
        INNER JOIN
    licensee_cert_types ON licensee_certs.cert_type = licensee_cert_types.id
GROUP BY licensee_certs.id
ORDER BY l.licensee_fname ASC
limit 5

Если я удаляю заказ к тому времени,получить мои 5 строк.В качестве альтернативы, если я удалю «SQL_CALC_FOUND_ROWS», я получу свои 5 строк.

Почему я не могу выполнить как заказ по, так и вычисление SQL?

Я думаю, что также важно отметить, что этот точныйзапрос работал нормально на MySQL 5.5.Я обновился до 5.6.44 и получил такое поведение.

На нашем производственном сервере под управлением 5.6.42 - у нас нет проблем с этим запросом.

ОБНОВЛЕНИЕ: Похоже, это конкретный запросупомянутое выше.Если я запускаю другой запрос с SQL_CALC + ORDER BY, я получаю свои результаты, например:

SELECT SQL_CALC_FOUND_ROWS
    p.*,
    a.agency_name,
    (SELECT 
            COUNT(*)
        FROM
            providership_notes
        WHERE
            providership_notes.provider_id = p.id) AS note_count,
    (SELECT 
            `user_id`
        FROM
            `user_entity_relations`
        WHERE
            `instance_id` = p.id
                AND `entity_type_id` = 2
        LIMIT 1) AS `user_id`,
    CONCAT(IFNULL(providership_name, ''),
            ' ',
            IFNULL(providership_abbr, ''),
            ' ',
            IFNULL(agency_name, ''),
            ' ',
            IFNULL(providership_state, '')) AS search
FROM
    providership AS p
        LEFT JOIN
    agency_providership_relations AS r ON r.providership_id = p.id
        AND `r`.`status` = 'approved'
        LEFT JOIN
    agency AS a ON r.agency_id = a.id
GROUP BY p.id
ORDER BY providership_name ASC
LIMIT 0 , 10```

1 Ответ

1 голос
/ 08 мая 2019

Так что ... стыдно сказать, оказалось, что на моем жестком диске не хватает места. У меня было ~ 5 МБ свободного места, что позволяло работать всем остальным запросам, кроме этого.

Я очистил немного места и пуф, как по волшебству, все работает.

...