Страницы

Поиск по вопросам

среда, 15 апреля 2020 г.

Оптимизация php и mysql

#php #оптимизация #mysql

                    
И опять вопросы по работе с mysql и php:
1) Есть два запроса:
mysql_query('select * from `table` where `id`='.$id.' and `user_id`='.$_SESSION['id']);
mysql_query('select * from `table` where `id`='.$id.' and `user_id`='.$_SESSION['id'].'limit
0, 1');

Первичный ключ - id. Имеет ли смысл писать limit 0, 1 в конце запроса или это не
ускорит запрос?
2) В случае уже полученных данных:
$ar = array();
$res = mysql_query('select * from `table` where `id`<30');
while($ar = mysql_fetch_assoc($res)){}

Что лучше использовать: mysql_num_rows($res) или sizeof($ar) ?
3) Зачем нужен mysql_fetch_array, если есть mysql_fetch_assoc и mysql_fetch_row?
По идее, эти две функции по отдельности работают быстрее?
4) При организации, допустим, блогов, разумно ли вынести посты блогов в отдельные
файлы, а комментарии оставить в БД? Просто тогда получается, что при выводе последних
блогов одновременно будет вестись работа как с БД, так и с файлами, что мне не нравится.
Тем более, что анонс все равно придется писать в БД.
5) Определение глобальных переменных в функции - довольно медленная вещь. Можно ли
ускорить работу функции, загнав ссылки на нужные переменные в массив и определив в
функции глобальным только новый массив? То есть, было:
function f() {
    global $ar1, $ar2, $ar3;
}

Стало:
$all = array('ar1' => &$ar1, 'ar2' => &$ar2, 'ar3' => &$ar3);
function f() {
    global $all;
    $ar1 = $all['ar1'];
}

Если целесообразность некоторых вопросов у вас вызвала недоумение, считайте, что
я любитель экономить на спичках.    


Ответы

Ответ 1



1) Имеет смысл сделать так: mysql_query('select * from `table` where `id`='.$_SESSION['id'].' limit 0,1'); Только исключите в запросах *, тогда будет экономия уже не на спичках :) 2) Согласен с @mozzart 3) mysql_fetch_array работает быстрее, чем assoc, т.к. добавляет только индексы в массив. 4) Согласен с @mozzart 5) Скорее вот так быстрее: function (&$ar1, &$ar2, &$ar3) { ... } Пример: class Api { private $db; public function test() { // Этой функции Вы собирались передать get и post $this->db; // объект бд } } или так: class Api extends DB { public function test() { $this->query(); } } class DB { public function query() { ... } }

Ответ 2



1) Смысл есть 2) Если нужно просто получить количество записей, то логичнее и оптимизированней использовать mysql_num_rows, если все записи получены в массив, то тогда конечно - sizeof 3) Не проверял... 4) Если хранение файлов подразумевает организацию кэширование, то тогда да. Грубо говоря, работа с файлами происходит намного быстрее чем с БД 5) Первый вариант быстрее

Комментариев нет:

Отправить комментарий