MySQL как оптимальнее?

Главные вкладки

Аватар пользователя Garese Garese 11 августа 2013 в 12:45

Подскажите как оптимальнее или правильнее что ли.

Допустим делаю выборку:

<?php
$result 
db_query_range("
SELECT n.title, n.nid, nc.nid, nc.totalcount, cts.nid, cts.field_image_fid, f.fid, f.filepath
FROM {node} n
INNER JOIN {node_counter} nc ON n.nid = nc.nid
INNER JOIN {content_type_story} cts ON nc.nid = cts.nid
INNER JOIN {files} f ON cts.field_image_fid = f.fid
WHERE n.status = 1
ORDER BY nc.totalcount
DESC "
020);
while (
$node db_fetch_object($result)) {
print  
".......";
}
?>

Или лучше запрос уменьшить и загрузить ноду:

<?php
$result 
db_query_range("SELECT n.nid, nc.nid, nc.totalcount
FROM node n, node_counter nc
WHERE n.status = 1 and n.nid = nc.nid
ORDER BY nc.totalcount
DESC "
020);
while (
$node db_fetch_object($result)) {
$content node_load($node->nid);
print  
".......";
}
?>

Комментарии

Аватар пользователя webpavilion webpavilion 11 августа 2013 в 13:03

быстрее (в большинстве случаев) будет работать первый вариант.
А как "правильнее" зависит от того что вы подразумеваете под "правильнее" - если это обычный клиентский сайт то лучше делать через views такое, если хайлоад проект с ограниченным бюджетом на железо то можно и так как в 1 варианте.

Аватар пользователя Garese Garese 11 августа 2013 в 13:15

Сайты свои, views устанавливать ради одной выборки смысла нет, посещаемость средняя у проектов до 10 тыс. посетителей в сутки.
Спасибо, буду с базы дергать значит. Просто думал node_load базу разгрузит.

Аватар пользователя webpavilion webpavilion 11 августа 2013 в 14:05

Garese wrote:
Сайты свои, views устанавливать ради одной выборки смысла нет, посещаемость средняя у проектов до 10 тыс. посетителей в сутки.
Спасибо, буду с базы дергать значит. Просто думал node_load базу разгрузит.

node_load это обертка над entity_load то есть по сути это DrupalEntityControllerInterface::load, и базу он не разгрузит скорее наоборот из-за накладных расходов.

Аватар пользователя sg85 sg85 11 августа 2013 в 16:54

тут и мерить нечего, 1й запрос далеко не тяжелый, и в данном случае, разница в запросах к БД будет не велика, а вот от кучи node_load увеличится время на PHP обработку, при том довольно сильно(200-300 node_load на слабом железе могут занимать уже секунды).