Есть простая таблица с двумя полями - text
и pathname
. В первом поле хранится текст (в среднем 2000 символов), а во втором - URL запрошенной страницы. При открытии страницы выполняется запрос к базе. Если найдена запись с нужным pathname
, то функция возвращает текст этой записи. Почему-то этот запрос выполняется непозволительно долго на фоне остальных - 200 миллисекунд.
function getBottomPageText($request_uri) {
$postgre = new Postgre();
$connect = $postgre->connect();
$query = "SELECT text FROM tickets_bottom_text WHERE pathname = '{$request_uri}'";
$result = pg_query($query) or die('Query failed: ' . pg_last_error());
pg_close($connect);
if(pg_num_rows($result) > 0) {
$row = pg_fetch_assoc($result);
return array(
'text' => $row['text']
);
} else {
return array(
'text' => null
);
}
}
Почему так сильно проседает производительность при простейшей выборке текста? В таблице всего 10 записей.
Предположу, что у вас отсутствует индекс по полю request_uri
.
Создайте индекс (судя по вашему описанию он может быть уникальным) в вашей БД:
CREATE UNIQUE INDEX ix_tickets_bottom_text ON tickets_bottom_text(request_uri);
PS поиск по уникальному индексу обычно быстрее чем по неуникальному.
PPS даже несмотря на то, что у вас всего 10 записей в таблице - они занимают несколько страниц (хранится текст в среднем 2000 символов), если поле request_uri
занимает значительно меньше памяти, то возможно весь индекс поместится в меньшее количество страниц. В любом случае при доступе при помощи уникального индекса понадобится чтение одной дополнительной страницы данных (если вернуть надо поле(я), не содержащееся в самом индексе).
Поиск по строковым полям осуществляется медленнее чем поиск по полям типа int
. Попробуйте указать поле pathname как индекс
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Судя по документации Memcached в PHP, объекты записываются в память и хранятся там до тех пор, пока:
Помогите, пожалуйста Мне нужно подключиться к целевому сайту через прокси сервера, эти прокси сервера должны браться списком из файла, я примерно...
Пытаюсь разбираться с PHP и в частности с моделью MVCПодскажите, пожалуйста: Разбирая базовый набор фреймворка yii2, нашел, что в представлении...