#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) Первый вариант быстрее
Комментариев нет:
Отправить комментарий