Fetch huge data from MySQL in Java
Вот такая возникла проблема:
есть очень большая таблица MyISAM. Нужно из джавы вытащить все данные, то есть выполнить простой запрос: «select * from mtable». Наблюдаю два случая:
1. просто выполняю запрос — JDBC драйвер пытается вытащить все данные сразу — получаю OutOfMemory.
2. Выставляю fetch size у PreparedStatement. Сервер начинает создавать большие файлы во временной директории и у меня заканчивается место на диске.
Помогите спасите))
6 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівДа, именно я так в конце концов и сделал. Просто есть программы (например sphinx search) которые вытаскивают данные без дополнительных ухищрений, поэтому я искал рецепт как это сделать на JDBC.
делайте как antony говорит, только сначала вычитайте все primary_key, разбейте на страницы и читайте по страницам
SELECT * FROM mtable WHERE primary_key> =a2 AND primary_key < a3;
SELECT * FROM mtable WHERE primary_key> =a3 AND primary_key < a4;
и т.д.
mysql при указании LIMIT n, m будет пробегать по первым n записям, потому и тормоза
так чому їх не можна зробити малими та викликати запит багато раз?:)
Думаю что я пробовал этот вариант, и проблема в том что когда n и m большие, запросы сильно тормозят.