#php #postgresql #partitioning
Вопрос:
У меня проблема с точным знанием того, как работают таблицы разделов .
Итак , у меня есть таблица, содержащая около 10000000 записей .
Чтобы получить мои данные со страницы php, я запускаю этот код :
<select id="computation_date" name="computation_date" class="form-control input-lg" data-live-search="true">
<option value="">Select Computation Date</option>
<?php
// Select last computation date
$query_last_date = "SELECT datecalcul from Table_Name ORDER BY datecalcul DESC LIMIT 1";
$result_last_date = pg_query($query_last_date);
$row_last_date = pg_fetch_assoc($result_last_date);
// Fetch all the Computation Date data
$query_date = "SELECT DISTINCT datecalcul as d_datecalcul from Table_Name ORDER BY datecalcul ASC";
$result_date = pg_query($query_date);
while ($row_date = pg_fetch_assoc($result_date)) {
echo '<option value="' . $row_date['datecalcul'] . '">' . $row_date['datecalcul'] . '</option>';
}
echo '<option value="' . $row_last_date['datecalcul'] . '" selected="selected">' . $row_last_date['datecalcul'] . '</option>';
$last_date = $row_last_date['datecalcul'];
?>
</select>
Итак , я понял, что для обработки большого количества данных мне нужно использовать таблицы разделов для оптимизации и повышения производительности отображения данных на веб-странице php
Поэтому я разделил свое «Имя таблицы», используя этот код в PostgreSQL :
-- step 1 - declare table defintion
create table Table_Truncate (
LIKE Table_Name INCLUDING ALL)
PARTITION BY RANGE (datecalcul);
-- step 2 - declare partitions
create table Table_Truncate_2021 PARTITION OF Table_Truncate
for values from ('2021-01-01') TO ('2021-12-31');
create table Table_Truncate_2020 PARTITION OF Table_Truncate
for values from ('2020-01-01') TO ('2020-12-31');
create table Table_Truncate_2023 PARTITION OF Table_Truncate
for values from ('2023-01-01') TO ('2023-12-31');
create table Table_Truncate_2022 PARTITION OF Table_Truncate
for values from ('2022-01-01') TO ('2022-12-31');
create table Table_Truncate_2000 PARTITION OF Table_Truncate
for values from ('2000-01-01') TO ('2000-12-31');
-- step 3 insert data
insert into Table_Truncate
select * from Table_Name ;
Мой вопрос в том , как я могу отобразить свои данные на странице php с помощью таблиц разделов ? или тот факт, что я разделил свою таблицу, я не изменяю свой php-код ?
Комментарии:
1. Таблица-это зарезервированное слово в SQL, которое никогда не будет работать в качестве имени таблицы. И нет, использование двойных кавычек » не улучшит ситуацию, это просто задержка в решении проблем, с которыми вы столкнетесь. Используй имя получше.
2. Я написал таблицу только для того, чтобы проиллюстрировать свой пример ! в противном случае в моем коде он называется другим
3. Когда вы выбираете данные из родительской таблицы, сервер базы данных при необходимости получит их из разделов. Вам не нужно ничего делать в коде вашего приложения.
4. Итак , мне придется просто вызвать разделенную основную таблицу
5. Для вашего приложения совершенно не имеет значения, разделена таблица или нет. Просто выберите нужные вам данные, создайте условия «где», условия присоединения или что-то еще, как вы всегда делали. Вашему приложению все равно, только база данных заботится о технической реализации.
Ответ №1:
Итак , я понял, что для обработки большого количества данных мне нужно использовать таблицы разделов для оптимизации и повышения производительности отображения данных на веб-странице php
Нет, в вашем случае вы запрашиваете все строки таблицы.
как я могу отобразить свои данные на странице php с помощью таблиц разделов
По доступу к нужному вам разделу(разделам) это не имеет смысла в вашем случае.
Анализируя ваш код, я полагаю, что у вас есть ограниченный список «date_calcul» (если ваш выбор не сработает), и этот «date_calcul» — это исторические данные.
Если это правильно, я должен хранить старые записи ваших вычислений в таблице «calculation_dates», которую вы должны обновлять после каждого вычисления, и запрашивать эту небольшую таблицу, которая значительно улучшит то, что вы называете «производительностью отображения», но на самом деле это время процессора сервера.
Комментарии:
1. Разве вы не понимаете этот ответ?