За последние 24 часа нас посетили 21885 программистов и 1007 роботов. Сейчас ищут 640 программистов ...

Таблицы с миллионами записей

Тема в разделе "MySQL", создана пользователем AterCattus, 10 мар 2009.

  1. AterCattus

    AterCattus Активный пользователь

    С нами с:
    6 фев 2008
    Сообщения:
    80
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Образец исключительно тестовый.

    Есть таблица:
    [sql]CREATE TABLE `tests` (
    `id` int(10) unsigned NOT NULL auto_increment,
    `user_id` int(10) unsigned NOT NULL,
    `text` text NOT NULL,
    PRIMARY KEY (`id`),
    KEY `user_id` (`user_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;[/sql]

    В ней предполагается хранить порядка 10.000.000 - 100.000.000 записей. При данном подходе "в лоб", запросы с LIMIT отрабатывают достаточно быстро, а вот тот же COUNT(*) WHERE user_id = smth проседает на несколько секунд. Понятно почему, но тем не менее это время недопустимо.

    Вообще интересует вопрос работы с большими объемами данных (это простейший пример был). И именно средствами MySQL, а не "поставь Oracle" и подобными :) Есть некоторые идеи, но хотелось бы услышать мнение форумчан по данной теме.
     
  2. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    индексы надо грамотно использовать и все будет зашибись.
    а вот запрос с лимитом как раз будет работать только на первых страницах.
     
  3. AterCattus

    AterCattus Активный пользователь

    С нами с:
    6 фев 2008
    Сообщения:
    80
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    индекс на user_id. по нему же и отбор. MYD порядка 5ГБ, MYI порядка 3ГБ.
     
  4. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    разумеется, памяти не хватает. и что в нем? ты будешь говорить что индекс для поля "инт" ? )))))
     
  5. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    создаются временные таблицы на диске при таких операциях. вариант 1 - выносить text в отдельную таблицу.

    ты посмотри EXPLAIN. что покажет?