|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 22 Aug 2002 16:43:34 To : Igor S Chencov Subject : Re: DBI, DBD или MySQL? -------------------------------------------------------------------------------- Здравствуй, Igor S Chencov. EG>>> Есть таблица в MySQL на 8.5 миллионов строк, полгигабайта данных и еще EG>>> 370M индексов, по сути - большой лог для select'ов. EG>>> Выяснилось, что часть строк некорректна в смысле задачи, надо их EG>>> найти, вывести (и удалить, но это потом). Есть критерий, как искать, EG>>> выражается простым select'ом с where плюс небольшая post-обработка. EG>>> Таблица в MyISAM-файле. EG>>> Если пробую делать по man DBI (prepare, execute, fetch, fetch...), EG>>> то вижу, что execute длится очень долго, причем похоже на то, что EG>>> perl собирается всю базу в память засосать, прежде чем выйти из fetch. EG>>> Как ему отвыкнуть? Я бы хотел по одной строке обрабатывать, в цикле EG>>> fetch делая. EG>>> И кто виноват - subj? ISC> AC: Особенность DBD::MySQL, скорее всего, наведенная нижележащей ISC> библиотекой. AC: Документированная, AFAIR. ISC> Вряд ли ... Вернее сказать правильно, но ситуацию не проясняет :-) ISC> Все дело в execute - по этой команде любая клиент-серверная SQL база ISC> выполняет Select (т.е. практически ты делаешь select как из MySQL ISC> monitor) - а затем по fetch тебе выдаются порциями отобранные строки. Так дело не в том, что селект всю базу шерстит, а в том, что нижележащая библиотека не может вернуться из своего execute, пока не вытащит все данные. А перловый fetch работает с тем, что уже вытащено. ISC> Выводов 2 - ISC> 1. Оптимизировать запрос (может добавлением нового индекса) ISC> 2. Использовать какой-нибудь фокус (если он есть) MySQL для ISC> последовательной обработки таблицы ... ISC> Bye ! ISC> P.S. Сам я не специалист по MySQL - но для Oracle поведение DBD будет то же ISC> самое ... У оракла как раз fetch из базы данные тянет, по кусочкам. -- Artem Chuprina Communiware.net RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/358.49, ICQ: 13038757 --- ifmail v.2.15dev5 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/14454d994963a.html, оценка из 5, голосов 10
|