det_high_selective_column int(10) unsigned not null,
create table entity_details(edet_id int(10) unsigned auto_increment,
)
constraint pk_entity primary key(entt_id)
data_column varchar(32),
low_selective_column int(10) unsigned not null,
high_selective_column int(10) unsigned not null,
order_column datetime,
create table entity(entt_id int(10) unsigned auto_increment,
from information_schema.global_status g1, information_schema.global_status g2
primary key pk_pivot (row_number)
row_number int(4) unsigned auto_increment,
drop table if exists entity_details;
Используя sql задачу можно сформулировать следующим образом:
Решать такие задачи всегда интересно, но их решение сильно зависит от СУБД, под управлением которой крутится твоя база данных. Если у тебя в рукаве козырной туз в виде Oracle, то есть шанс, что эти костыли он подставит сам. Но спустимся на землю у нас есть только MySQL, так что придется почитать теорию.
Предположим, имеется некоторые сущности А и Б, связанные между собой по принципу One-to-Many. Количество экземпляров данных сущностей достаточно велико. При отображении сущностей для пользователя необходимо применить ряд независимых критериев, как для сущности А так и для сущности Б. Причем результатом применения критериев являются множества достаточно большой мощности порядка нескольких миллионов записей. Критерии фильтрации и принцип сортировки задается пользователем. Как (я бы ещё спросил: Зачем им миллионы записей на одном экране? но говорят надо) показать все это пользователю за время 0 секунд?
Есть задачи, которые в рамках реляционных СУБД не имеют универсальных решений и для того чтобы получить хоть какой-то приемлемый результат, приходится придумывать целый набор костылей, который ты потом гордо называешь Архитектура . Не так давно мне как раз встретилась именно такая.
Как MySQL оптимизирует ORDER BY, LIMIT и DISTINCT
8 августа 2011 в 18:22
Как MySQL оптимизирует ORDER BY, LIMIT и DISTINCT / Хабрахабр
Комментариев нет:
Отправить комментарий