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

запрос с сортировкой к таблице типа MEMORY оказался медленее

Тема в разделе "MySQL", создана пользователем Yudik, 3 мар 2011.

  1. Yudik

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

    С нами с:
    25 фев 2011
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    где то в РФ
    есть две таблицы по содержании и структуре идентичные, только одна тип myIsam, а другая MEMORY, вроде бы все запросы к Memory-таблицы должны осуществляться быстрее... для SELECTа без сортировки так и есть (0.0020 vs 0.0006 - средние показатели) , но если к SELECTу добавляю ORDER BY, то myisam оказывается быстрее чем memory-таблица (0.0008 vs !!!! 0.0050).
    Из-за чего такое может быть ??? Поле по которому сортируется выборка типа INT и проиндексировано...
     
  2. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    Потому что мемори - это тип предназначенный для быстрого доступа к статике. MyISAM предназначен для быстрых операций над данными (за счёт того что у него отрезаны почти все механизмы по обеспечению целостности)

    Смотри "MySQL сравнение типов таблиц"

    PS: разбежка всё равно слишком большая. посмотри, используются ли в обеих таблицах индексы для полей по которым идёт сортировка
     
  3. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Нужно учитывать что для таблиц типа memory поддерживаются индексы двух типов - hash и btree.
    Hash - очень быстрый поиск при сравнении =, но отвратная сортировка, т.к. по хешам сортировать безполезно. В итоге full scan.
    Btree более медленен в поиске, но зато поддерживает все остальные операции нормально.

    В общем читать тут: http://dev.mysql.com/doc/refman/5.5/en/ ... ngine.html
    О типах индексов: http://dev.mysql.com/doc/refman/5.5/en/ ... dexes.html

    До просветления и понимания того, что там описано. Тонкостей много.
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    индексы не забываем делать... =)
     
  5. Yudik

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

    С нами с:
    25 фев 2011
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    где то в РФ
    Спасибо за подсказку, заодно узнал, что для memory-таблиц можно задавать тип индекса и btree и hash (в русском мане на mysql.ru в описании синтаксиса CREATE INDEX, этого почему то нет). Разобрался, все гуд.
     
  6. Yudik

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

    С нами с:
    25 фев 2011
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    где то в РФ
    to igordata
    to titch

    ... то бишь индекс по полю есть. А проблема, как подсказал Psih заключалась в типе индекса