При работе с большими выборками MySQL с миллионами строк во время извлечения данных могут возникнуть проблемы с ограничениями памяти. В этой статье рассматривается решение этой проблемы с помощью функции LIMIT для извлечения данных управляемыми фрагментами.
Для итеративного извлечения больших наборов данных можно использовать функцию LIMIT. Указав начальную строку и максимальное количество строк для извлечения, мы можем разбить процесс выбора на более мелкие подмножества. Например, выполнение следующего запроса:
SELECT * FROM MyTable ORDER BY whatever LIMIT 0,1000
позволит получить первые 1000 строк. Чтобы получить последующие наборы из 1000 строк, мы можем выполнить аналогичные запросы с скорректированными значениями LIMIT, например:
SELECT * FROM MyTable ORDER BY whatever LIMIT 1000,1000 -- rows 1,001 - 2,000 SELECT * FROM MyTable ORDER BY whatever LIMIT 2000,1000 -- rows 2,001 - 3,000
Однако этот подход не гарантирует согласованный порядок строк из-за возможных изменений в таблице во время процесса поиска. Чтобы решить эту проблему, мы можем сначала создать временную таблицу и заполнить ее упорядоченными результатами:
CREATE TEMPORARY TABLE MyChunkedResult AS ( SELECT * FROM MyTable ORDER BY whatever );
Это гарантирует, что порядок строк останется неизменным, пока мы извлекаем их частями:
SELECT * FROM MyChunkedResult LIMIT 0, 1000; SELECT * FROM MyChunkedResult LIMIT 1000,1000; SELECT * FROM MyChunkedResult LIMIT 2000,1000; .. and so on.
Чтобы определить подходящую начальную строку для каждого фрагмента и проверить конец результатов, можно реализовать собственную логику. Для оптимизации производительности рекомендуется использовать фрагменты значительно большего размера, чем 1000 записей.
По завершении извлечения данных рекомендуется удалить временную таблицу для управления ресурсами:
DROP TEMPORARY TABLE MyChunkedResult;
Принятие этого подхода к извлечению фрагментов значительно повышает производительность и позволяет успешно извлекать большие MySQL-файлы. наборы данных.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3