![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
Wolf1994 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 5.10.2004 Репутация: нет Всего: 29 |
Есть шахматный сайт. На нём стоит база MySQL с таблицей в данный момент весом 50 Мб. Размер таблицы продолжает расти. К ней идут частые SELECT / UPDATE с активных игр. Имеет ли смысл сделать дополнительную таблицу только для текущих игр, с порядка 100-300 записями, которая будет подвергаться активным UPDATE / SELECT, а по завершении партий сбрасывать из неё данные в большую таблицу? Будет ли выигрыш в производительности / снижение нагрузки на MySQL-сервер?
|
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
какая структура? какие индексы? какие запросы? что показывает explain для select запросов?
или ты хочешь на абстрактный вопрос получить абстрактный ответ? |
|||
|
||||
Wolf1994 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 5.10.2004 Репутация: нет Всего: 29 |
Структура:
Индекс на 8522 элементов id. Запросы SELECT * / UPDATE по всем полям в процессе одной партии, в основном log, white_talk, black_talk, white_move, black_move, white_time, black_time, turn. Explain'ом никогда не пользовался и не знаю для чего он нужен. Вопрос. Есть ли разница - работать с такой таблицей с 10+ тысячами записей или с парой сотен? И насколько большая разница, если есть. |
|||
|
||||
Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 20 Всего: 40 |
Разница будет когда речь пойдет о десятках миллионов. 50М или там 10..20 тыщщ это не тот обьем который заставляет беспокоиться....
-------------------- Бонифаций. |
|||
|
||||
Wolf1994 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 5.10.2004 Репутация: нет Всего: 29 |
Бонифаций, спасибо за ответ. Вопрос решён.
|
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
если запрос приводит к fullscan, если селективность у запросов маленькая, то разница между 50М и 10К должна быть более, чем заметна.
|
|||
|
||||
Wolf1994 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 5.10.2004 Репутация: нет Всего: 29 |
skyboy, что такое полное сканирование и маленькая селективность и имеет ли это какое-то отношение к UPDATE?
|
|||
|
||||
Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 20 Всего: 40 |
50 мегабайт - размер данных. 10 тыщщ строк -------------------- Бонифаций. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
Бонифаций, да, неправильно прочитал. но все равно, 10К, как на меня, впонле достаточно, чтоб думать про оптимальность. не?
Wolf1994, fullscan в противовес использования индекса - механизм работы с данными, при котором просматриваются все записи таблицы. когда используется индекс - работа идет с отдельной структурой, имеющей фиксированный размер одной записи и, обычно, целиком умещающейся в оперативной памяти(что критично). селектиновсть(саксонизм от "select" - "выбирать") - степень фильтрации. чем выше селективность запроса, тем больше записей "отсеивается" при выполнении запроса. использовать или не использовать индекс - определяет оптимизатор СУБД. одним из параметров выступает предполагаемая селективность. например, если у тебя поле типа boolean с двумя возможными значениями и на него указан индекс, то оптимизатор вполне может проигнорировать индекс и использовать fullscan - предположительно, запрос по этому полю выберет большое количество записей и работать сначала с индексом, чтоб выбрать 50% записей, а потом - работать с данными выбранных записей, может быть медленнее, чем работать с таблицей напрямую сразу(fullscan). впрочем, могу ошибаться. но, если что, камрады меня поправят. |
|||
|
||||
Wolf1994 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 5.10.2004 Репутация: нет Всего: 29 |
Селективность моих запросов максимальная, так как все они идут по id, на котором стоит индекс.
|
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Наоборот ![]() Чем больше селективность, тем больше записей отберется. Селективность = 0 - не отбирает записей, селективность = 1 (100%) оберутся все записи ;) С учетом того что при индексном доступе дисковые чтения идут часто но помалу(малыми порциями), а при полном сканирования реже но помногу, при полном сканировании дисковая подсистема работает более эффективно. Т.о. оценочную цифру 50 можно смело сократить до ~20. От обстоятельств конечно многое зависти но в общем случае, наверное, гдето так. ![]() -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
||||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Сорри MySQL не моя песочница, зря сюда полез. Тут все может быть СОВСЕМ по другому. Интересно ведь ![]() НО. Даже если индекс целиком в памяти, чтение таблицы будет все равно ведь только построчно(поблочно) можно будет производить, нет? Вообще в в MySQL операции ввода/вывода разделяются на мультиблочные и одноблочные? -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
к сожалению, абсолютно без понятия.
|
|||
|
||||
Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 20 Всего: 40 |
Это отдано на откуп engine. У каждого по своему. Конкретно про innodb - последовательое чтение блоков там не имеет смысла (данные хранятся как листья в B-tree по первичному ключу), Зато там есть read-ahead чтение, это чтение асинхронное, так что в общем больших проблем не возникает. Да и на таких обьемах (50М) - таблица быстро окажется полностью в буфере innodb, и все чтение будет только оттуда. На диск будут только запись. -------------------- Бонифаций. |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |