За последние 24 часа нас посетили 16412 программистов и 1678 роботов. Сейчас ищут 912 программистов ...

Помогите разобратся с оптимизацией запроса в mysql!

Тема в разделе "MySQL", создана пользователем vallentin8, 8 май 2015.

  1. vallentin8

    vallentin8 Новичок

    С нами с:
    8 май 2015
    Сообщения:
    1
    Симпатии:
    0
    Есть таблица:
    Код (PHP):
    1. -- Структура таблицы `work`
    2. CREATE TABLE IF NOT EXISTS `work` (
    3. `id` int(11) NOT NULL,
    4. `first_name` int(11) DEFAULT NULL,
    5. `last_name` int(11) DEFAULT NULL,
    6. `bdate` date DEFAULT NULL,
    7. `day` tinyint(2) NOT NULL,
    8. `month` tinyint(2) NOT NULL,
    9. `year` int(5) NOT NULL,
    10. `country` int(11) DEFAULT NULL,
    11. `city` int(11) DEFAULT NULL,
    12. `data` longtext,
    13. `pr` tinyint(1) NOT NULL,
    14. PRIMARY KEY (`id`),
    15. KEY `bdate` (`bdate`),
    16. KEY `pr` (`pr`),
    17. KEY `day` (`day`),
    18. KEY `month` (`month`),
    19. KEY `year` (`year`),
    20. KEY `first_name` (`first_name`),
    21. KEY `last_name` (`last_name`)
    22. ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
    В таблице 10 миллионов записей.
    Делаю выборку исключительно по цифровым полям, которые проиндексированы:

    SELECT id FROM work where first_name = '11' AND last_name = '22' AND day = '5' AND month = '10' AND year = '2001'"
    В результате по времени такой запрос работает так:
    Поиск записи: 3 sec.
    Поиск записи: 0 sec.
    Поиск записи: 1 sec.
    Поиск записи: 0 sec.
    Поиск записи: 28 sec.
    Поиск записи: 3 sec.
    Поиск записи: 112 sec.
    Поиск записи: 1 sec.
    Поиск записи: 2 sec.
    Поиск записи: 0 sec.
    Поиск записи: 34 sec.
    Поиск записи: 11 sec.


    Соответственно поиск 1000 записей занимает несколько часов! Никаких update и delete параллельно не ведётся.
    При этом mysql совсем не занимает процессор – меньше 1%!!!
    Mysql установлена на локальной машине WIN 7.
    Вопросы:
    1. Что я сделал не так, почему так долго проходит поиск, почему такой разброс по времени и что делать?
    2. Почему совсем не занят процессор, как заставить mysql пользоваться для поиска всеми ресурсами ПК?
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    day month year сделать одним типом DATE

    first_name, last_name, число <- и по этому сделать составной индекс