Цитата (AllesKlar @ 2.12.2014 - 23:28) | ||
Не буду утвержать на 100%, но думаю, что подзапрос после первого раза закешируется. |
Цитата |
The cache is not used for queries of the following types:
|
Цитата (AllesKlar @ 3.12.2014 - 06:06) |
twin Вот этим и отличается инженер от математика. Инженер возьмет и сделает, а математик вытрахает мозг, причем без гарантии, что будет что-то сделано вообще ![]() |
Цитата |
Rewriting the function call into a scalar subquery allows Oracle to use scalar subquery caching to optimize the number of function calls needed to complete the query. |
Цитата (twin @ 3.12.2014 - 09:56) |
А и то и другое нужно считать запросом. Запрос - это обращение за данными. И не важно, где они находятся, на другом сервере, в ФС или кэше. Но так, как запрос к СУБД неизбежен, его можно не считать. ... |
Скрытый текст |
да, mysql - default db когда спрашиваю про sql на php форумах |
Цитата (S.Chushkin @ 3.12.2014 - 06:33) |
Запросом принято считать то, что выполняется атомарно (грубо говоря, - до ";"). Всё остальное - подзапросы. А то, что Вы называете "обращение за данными" это другое. |
Цитата |
А принято считать как раз его, так как все, что внутри ошибочно принимается за один запрос. |
SELECT
SQL_CALC_FOUND_ROWS id
FROM
`table`
ORDER BY
id DESC
LIMIT
0, 3
$sql = "запрос выше";
$sql = mysql_query($sql);
while ($row = mysql_fetch_assoc($sql)) {
echo '<br>'.$row['id'];
}
$sql = mysql_query("SELECT FOUND_ROWS()");
$all = mysql_fetch_assoc($sql);
echo '<br>Все записей : '.$all['FOUND_ROWS()'];
Цитата (twin @ 3.12.2014 - 09:56) |
Цитата ОДНИМ запросом выбираем 3 записи, считаем общее количество записей в таблице (гарантированно только один раз будет подсчет сделан). Там 4 запроса, не считая межсерверный. И нечево пудрить мозги. |
pg_query( 'WITH
top3 as
(select * from table_name order by id desc limit 3),
count_all as
(select count(*) as c from table_name)
select *, (select c from count_all) as count_records
from top3
order by id' );
SELECT a.*, (SELECT b.`id` FROM `table2` b WHERE b.`id` = a.`id_parent`) AS `pid`
FROM `table1` a WHERE a.`date` < CURDATE()
Цитата |
Под словом "запрос" я понимаю (и чаще всего и другие тоже) те запросы, что передаются функции типа mysql_query() или pg_query(). |
Цитата (twin @ 3.12.2014 - 11:19) |
Дело в том, что СУБД глубоко плевать, что тут у вас принято и как вы это называете. Она выполняет запрос. Где бы он не находился. Снаружи или внутри другого. Поэтому подзапрос, это такой же полноценный запрос. С тем же обращением к хранилищу данных. |
Цитата |
Если я попрошу БД сделать EXPLAIN моего запроса, то получу ОДИН ответ, а не 4, как можно бы предположить по твоему ответу. И из этого одного ответа ну никак нельзя будет вытащить 4 разных запроса |
mysqli_query($db,"
SELECT COUNT(*);
SELECT ... LIMIT 3;
");