Задавайте вопросы, мы ответим
Вы не зашли.
Доброго времени суток!
Хочу спросить один момент относительно таблиц типа myIsam, когда в таблице очень большое количество записей (больше ста миллионов), (таблица без индексов, без ключей).
Есть таблица, в которую постоянно, ежесекундно дописыватся данные. В то же время к ней идут постоянно запросы (запросы прочитывают всю таблицу).
В то же блокировки (каковая, как я понял, была бы в случае InnoDB) не происходит - и запросы отрабатываются и данные пишутся без потерь. Не могли бы Гуру сказать пару слов насчет механизма разделения ресурсов на такие таблицу - там "частичные" блокировки происходят или что-то еще? Чтобы понять, можно ли так вообще делать или не стоит.
Заранее спасибо!
Неактивен
Посмотрите тему про concurrent_insert, http://sqlinfo.ru/forum/viewtopic.php?id=639
Неактивен
Спасибо за ответ, посмотрел. Если правильно понял, то установка concurent_insert в 2 может улучшать ситуацию (по сравнению с установкой в 1) лишь если дыры есть в таблице, а при отсутствии дыр изменений не будет, верно? Просто у меня из таблиц, про которые я сейчас пишу данные вообще не удаляются и не меняются update'ами. На сервере переменная глобально установлена в 1.
Отредактированно deadka (08.06.2010 09:53:19)
Неактивен
deadka написал:
Если правильно понял, то установка concurent_insert в 2 может улучшать ситуацию (по сравнению с установкой в 1) лишь если дыры есть в таблице, а при отсутствии дыр изменений не будет, верно?
Да.
Раз у вас таблица без индексов, то можно посоветовать сделать строки фиксированной длины. В этом случае запросы типа LIMIT X,Y будут работать быстрее.
deadka написал:
Такой еще вопрос администратам форума (сори за офтоп, когда ответите подредактирую тему и сотру его), если можете ответить на него - когда Вы начнете стирать старые темы? А то многие темы форума сейчас в избранном находятся, часто использую как справку ), не хотелось бы потерять их ), поэтому и спрашиваю ).
Никогда. Only knowledge will I save.
Неактивен
vasya написал:
deadka написал:
Если правильно понял, то установка concurent_insert в 2 может улучшать ситуацию (по сравнению с установкой в 1) лишь если дыры есть в таблице, а при отсутствии дыр изменений не будет, верно?
Да.
Раз у вас таблица без индексов, то можно посоветовать сделать строки фиксированной длины. В этом случае запросы типа LIMIT X,Y будут работать быстрее.
Скажите, я правильно понимаю, что строка фиксированной длины - это char(n) вместо varchar(n)?
А то у меня в таблице только числовые поля различных размеров - 4-х байтные, 2-х байтные и однобайтные беззнаковые целые (еще два поля типа datetime), вот и не соображу, можно ли применить рекомендацию ).
Vasya, скажите, а за счет чего запросы с лимитом будут быстрее работать? Ведь, как я понимаю, если в таблице нет индексов, а в запросе есть условие where, то все равно Full Tables Scan'а не избежать?
P. S. Спасибо за "Блокировки в mysql" ( http://webew.ru/articles/1383.webew), многое объяснило.
Неактивен
LIMIT может работать быстрее, если нет WHERE (например, «вытянуть все строки с
50 по 70ю») — MySQL сразу будет знать, откуда и докуда читать. Если есть WHERE,
то, конечно, всё это сводится на нет.
Неактивен