- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году Google заблокировал более 170 млн фальшивых отзывов на Картах
Это на 45% больше, чем в 2022 году
Оксана Мамчуева
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Приветствую.
Какая структура предпочтительней при большом количестве записей и частом обновлении?
1. Все в одной таблице с кучей полей с индексами.
2. Данные по разным таблицам, выборка по ним + join
?
Записей >100 лямов. При UPDATE и INSERT диск грузится - я так понимаю, из-за того, что индексы пересчитываются. Индексов около десяти - и простые, и составные. На чтение работает шустро. Ускорят ли отдельные таблицы операции обновления и вставки?
---------- Добавлено 08.11.2015 в 12:24 ----------
И еще вопрос вдогонку.
Индексы по полям во WHERE и ORDER будут работать? Как правильно индексы тут организовать?
Приветствую.
Какая структура предпочтительней при большом количестве записей и частом обновлении?
1. Все в одной таблице с кучей полей с индексами.
2. Данные по разным таблицам, выборка по ним + join
Денормализация таблиц может ускорить чтение, но пользоваться имеет смысл, если вы знаете, что делаете и уже использовали остальные методы оптимизации запросов.
Поэтому если вы задаете этот вопрос, значит, вам нужно пользоваться вторым вариантом.
Тем более, при частом обновлении.
Basilisk, имеет смысл денормировать все поля или только те, которые обновляются?
вполне достаточно только те, которые обновляются
Basilisk, имеет смысл денормировать все поля или только те, которые обновляются?
Дублировать имеет смысл как раз те, которые редко обновляются и только те, которые действительно помогут ускорить чтение.
Упрощенный пример - у вас есть миллиард заказов, для каждой строки заказа в таблице "Позиции заказа" есть количество и цена, при выборке вы умножаете количество на цену и получаете сумму по позиции.
Если вы заведете избыточную колонку Сумма, куда будете записывать при сохранении позиции заказа, то да - при выборке сэкономите время на вычислении, зато при обновлении, соответственно, потратите лишнее, плюс бонусом получаете дополнительный риск несоответствия данных.
Другой пример - в самой таблице "Заказы" у вас всегда будет поле "Общая сумма заказа" - чтобы сэкономить на join'ах и не подцеплять позиции заказа каждый раз, когда вам понадобится получить Номер, Дату и Сумму заказа.
А по второму вопросу что скажете?
Если сейчас есть составной индекс f1-f2-f3-f4 в одной таблице, то при разбиении на несколько таблиц и последующих join'ах, как будут индексы работать? Время выборки не увеличится?
Сначала join присоединяет соответствующую таблицу, а потом фильтрация по условиям происходит или сначала фильтрация, а потом join?
Записей >100 лямов. При UPDATE и INSERT диск грузится - я так понимаю, из-за того, что индексы пересчитываются. Индексов около десяти - и простые, и составные. На чтение работает шустро.
Не видя структуру таблиц трудно давать советы...
Примари кей состоит из одного поля или составной? (С составным могут быть нюансы с дисковой нагрузкой при инсертах)
Еще можно посмотреть, нужны ли все десять индексов.
SELECT ... FROM t1 WHERE f1=value1 AND f2=value2 AND f3=value3 ORDER BY f4
сейчас есть составной индекс f1-f2-f3-f4
Например, тут можно погонять тесты с составным индексом на три поля: f1-f2-f3
Возможно разница по времени выполнения будет небольшая и не перекроет накладные расходы по поддержке индекса f1-f2-f3-f4 (при частых UPDATE/INSERT)
Если есть возможность, то часто изменяемые данные желательно вынести в отдельную таблицу. Т.к. при каждом UPDATE или INSERT сбрасывеатся query_cache(для конкретной таблицы) и он ставовится бесполезен.
Вынес обновляемые поля в отдельную таблицу. Особого эффекта не заметил. Диск все равно грузится сильно - индексы постоянно пересчитываются, как я понимаю. Обновляется часто - раз в секунду, может немного реже.
Какие еще методы есть? Только накапливать изменения и одним коммитом их забрасывать в таблицу?
Какие еще методы есть?
Использовать кеш таблицу. И обновлять по ней обновляемые поля реже нежели раз в секунду.
индексы постоянно пересчитываются, как я понимаю.
Зачем вам индекс?
Выложите уже схему БД и заодно - что туда пишете, зачем вам советы "как вылечить больного без больного"?
Еще вариант - для данных с большой динамикой и структурой, которой можно пожертвовать - использовать NoSQL, вроде redis или mongo.
Выкосить лишние индексы, если есть. Скорректировать отдачу кешированием конечных результатов. Выкосить лишние записи, если возможно.