2012-03-13 2 views
1

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

main_table

id | column1 | column2 | column3_just_pointer 

smaller_table_1

id | main_table_id | column3 

smaller_table_2

id | main_table_id | column3 

меньше _table_3

id | main_table_id | column3 

Если MySQL имеет что-то вроде указателя, который может указывать на колонка3 в меньшей таблице на выполнение выберите команду: выберите идентификатор, column3_just_pointer из main_table, я могу разделить таблицы в указанной выше моды и передний конец PHP кода вообще не нужно редактировать. Надеюсь, я прояснился. Есть ли у кого-нибудь здесь какие-либо идеи относительно того, как и как это можно достичь? Спасибо за ваше время ...

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

ответ

0

Я закончил полностью разбивать таблицы по горизонтали такими именами, как small_table_1, small_table_2 и т. Д. И сохраняя запись начальных и конечных идентификаторов каждой таблицы в отдельной таблице, скажем «main_table». Новые данные добавляются только к последней таблице, и когда таблица пересекает 40000 строк, мое приложение автоматически создает новую таблицу less_table_n и помещает информацию о этой новой таблице в main_table.

Я задал этот вопрос в марте и до сих пор - июль, эта настройка работала безупречно на 3 моих веб-сайтах, и все мои 3 хоста тоже довольны тем, что сайты не занимают больше ресурсов на своем сервере.

0

Если вы выполняете вертикальное разбиение на разделы, вы можете создать представление, которое «объединяет» все связанные таблицы, поэтому приложение не обязательно должно знать о базовых таблицах вообще. Например,

TABLE main_table(id -PK, column list); 
TABLE detail1 (main_id - PK,FK to main_table, column list); 
TABLE detail2 (main_id - PK,FK to main_table, column list); 

CREATE VIEW main_view AS 
SELECT a.id, [columns from main_table], [columns from detail1, detail2, etc] 
FROM maint_table a 
LEFT JOIN detail1 b ON (b.main_id = a.id) 
LEFT JOIN detail2 c ON (c.main_id = a.id) 

Теперь все приложения select s может быть сделано против main_view.

+0

Но если я использую представления, проблема в том, что столбец, который я удалил из основной таблицы, нельзя разбить на несколько таблиц. Я могу просто создать small_table_1 и поместить все полмиллиона строк этого конкретного в ту одну таблицу ... Спасибо за ваш ответ ... – Vishnu

Смежные вопросы