структура таблиц mysql - одна очень большая таблица или отдельные таблицы?

Мы можем попробовать подход календарной таблицы здесь, где таблица календаря содержит диапазоны, которым вы хотите соответствовать:

WITH cte AS (
    SELECT 1 AS start, 499999 AS end UNION ALL
    SELECT 700001, NULL
)

SELECT
    t2.ItemId,
    t1.start,
    COALESCE(t1.[end], t2.[To]) AS [end]
FROM cte t1
INNER JOIN ItemRange t2
    ON (t2.[From] <= t1.[end] OR t1.[end] IS NULL) AND t2.[To] >= t1.start
WHERE
    t2.ItemId = 1;

enter image description here

[117 ]

Демонстрация

6
задан Rich Seller 21 July 2009 в 18:30
поделиться

5 ответов

Как насчет одной таблицы, разделенной веб-сайтом FK?

8
ответ дан 9 December 2019 в 22:40
поделиться

Если данные универсальны, пойдите с одной таблицей. Если когда-нибудь необходимо ВЫБИРАТЬ через все веб-сайты, имеющие несколько таблиц, боль. Однако, если Вы пишете достаточно сценариев, можно сделать это с несколькими таблицами.

Вы могли использовать механизм устройства хранения данных СЛИЯНИЯ MySQL, чтобы сделать, ВЫБИРАЕТ через таблицы (но не ожидайте хорошую производительность и не упускайте жесткий предел Windows количества открытых файлов - в Linux, Вы можете haveto использовать ulimit для повышения предела. Нет никакого способа сделать это в Windows).

Я повредил огромную таблицу во много (сотни) таблиц и использовал СЛИЯНИЕ для ВЫБОРА. Я сделал это так, я мог выполнить офлайновое создание и оптимизацию каждой из маленьких таблиц. (Например, ОПТИМИЗИРУЙТЕ или ALTER TABLE... ORDER BY). Однако производительность ВЫБОРА с помощью СЛИЯНИЯ заставила меня писать свой собственный механизм устройства хранения данных. (Описанный http://blog.coldlogic.com/categories/coldstore/'> здесь)

1
ответ дан 9 December 2019 в 22:40
поделиться

Я сказал бы, используют дизайн, что большинство имеет смысл, учитывая Ваши данные - в этом случае одна большая таблица.

Записи все будут тем же типом с теми же столбцами, таким образом, с точки зрения нормализации базы данных они будут иметь смысл иметь их в той же таблице. Индекс делает выбирающие конкретные строки легкими, особенно когда целые запросы могут быть удовлетворены данными в единственном индексе (который может часто иметь место).

Обратите внимание, что анализ посетителя обязательно включит много операций, где нет никакого простого способа оптимизировать кроме воздействовать на большое количество строк сразу - например: количества, суммы и средние числа. Это типично для интенсивно использующей ресурсы статистики как это, чтобы быть предварительно вычисленным и сохраненным, вместо того, чтобы выбранным живое. Это - что-то, о чем Вы хотели бы думать.

1
ответ дан 9 December 2019 в 22:40
поделиться

Используйте единственную структуру данных. После того как Вы начинаете встречаться с проблемами производительности существует много решений как Вы, может разделить Ваши таблицы идентификатором веб-сайта, также известным как горизонтальное разделение, или можно также использовать репликацию. Это все зависит от отношение чтений по сравнению с записями.

Но поскольку запуск сохраняют вещи простыми и используют одну таблицу с надлежащей индексацией. Можно также определить, нужны ли Вам транзакции или нет. Можно также использовать в своих интересах всевозможные mysql механизмы устройства хранения данных как MyIsam или NDB (в кластеризации памяти) для повышения производительности. Также кэширование играет очень хорошую роль в разгрузке загрузки из базы данных. Данные, которые главным образом только для чтения и могут быть вычислены легко, обычно помещаются в кэш, и кэш служит запросу вместо того, чтобы идти в базу данных, и только необходимые запросы переходят к базе данных.

1
ответ дан 9 December 2019 в 22:40
поделиться

Используйте одну таблицу, если у Вас нет проблем производительности с MySQL.

Никто здесь не может ответить на вопросы производительности, необходимо просто сделать тесты производительности сами для понимания, достаточно ли наличие одной большой таблицы.

0
ответ дан 9 December 2019 в 22:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: