Ответ на ваш запрос сложный. Это будет еще сложнее, если ваши таблицы содержат поля, которые записываются, если ваши данные холодные или слишком большие, чтобы их хранить в памяти. Он также зависит от механизма хранения, версии движка хранилища и нескольких других вещей.
Твердые результаты можно получить только путем бенчмаркинга.
Я могу внести полезный анекдот. В другом задании у нас была пользовательская база данных, которая содержала все данные для одного пользователя в одной строке. Данные пользователя составляли около 1-2K на пользователя, в общей сложности, и у нас было 25 миллионов записей пользователей.
База данных считывает и записывает данные на страницах по 8K каждый (MySQL InnoDB будет 16K страниц, кстати). Это означает, что у нас около 4-6 записей пользователей на странице базы данных и около 5 миллионов страниц данных.
В записи пользователя содержатся поля, в которых хранится время последнего входа пользователей. Между 7 и 9 утрами мы увидим около 8 миллионов уникальных пользователей, которые будут регистрироваться, поэтому нам будет около 8 миллионов страниц, загрязненных и нуждающихся в обратной записи. По существу, каждый день мы возвращаем всю пользовательскую таблицу на диск дважды или трижды.
Мы ввели искусственную связь 1: 1, которая напоминает страницы пользователя и user_details: у нас был пользователь и таблица user_lastlogin. Записи user_lastlogin были очень узкими, состоящими, по существу, только из идентификатора пользователя и (трех разных) последних дней входа пользователя (в зависимости от используемого сервиса). Поскольку user_lastlogin очень узкий, теперь у нас почти тысяча записей на странице и всего 25 000 страниц в таблице. Имея 8 миллионов уникальных логинов, нам теперь нужно записать намного меньше данных (поскольку контрольные точки и обратные записи в базе данных задерживаются). Нагрузка на дисковый ввод-вывод снижалась на порядок.
Извлеченный урок: может быть очень полезно отделить статические данные от изменчивых данных (мы рассмотрели статические данные пароля, так как у нас было около 15 000 изменений пароля в день, тогда как у нас было 8 миллионов обновлений last_login в день).
Какие технологии баз данных вы используете? – Ilan
Каков типовой размер запроса? то есть несколько пользователей или 100 000 пользователей. Вы извлекаете все поля из нескольких? – Euclid
MySQL с MyISAM, пользовательская таблица постоянно растет с каждым днем и может достигать 400 000 - 500 000 в течение одного года. Обычно она состоит из более 900 пользователей. – zamil