2009-09-24 4 views
1

У меня есть функция, которая принимает либо массив идентификаторов, либо уникальный идентификатор в качестве аргумента. Если массив передан, он вставляется в запятую, чтобы сделать запрос ID дружественным.Как правильно проверить производительность запроса

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

Запрос выглядит следующим образом:

"UPDATE tbl_name SET enabled = 1 WHERE ID IN (" . $IDs . ")"; 

Теперь мне интересно, если есть проблема производительности с использованием ТНА выше запроса для массива и что-то вроде:

"UPDATE tbl_name SET enabled = 1 WHERE ID = " . $IDs; 

если только один идентификатор передается.

Я тестировал оба запроса в браузере запросов MySQL для одного и того же ID и получил производительность 0,02 секунды для обоих запросов - тривиальная разница в производительности.

Простой тест двух в браузере запросов - хороший способ проверить оптимальную производительность запроса?

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

ответ

1

Я бы потерял второй запрос и оставил только первый, чтобы сделать код более удобочитаемым и поддерживаемым.

if (is_array($id)) $id = implode(',', $id); 
$query = 'UPDATE table SET marked = 1 WHERE id IN ('.$id.')'; 

Таким образом, вы получите ни один из этих примеров запросов:

UPDATE table SET marked = 1 WHERE id IN (15); 
UPDATE table SET marked = 1 WHERE id IN (21,12,15,16); 

Вот что MySQL руководство говорит об использовании оператора IN:

Если все значения константы , они оцениваются по типу expr и сортируются. Затем поиск объекта осуществляется с помощью двоичного поиска. Это означает, что IN очень быстро, если список значений IN целиком состоит из констант.

Я также предлагаю «не исправить то, что не сломано», и лучше позаботьтесь о том, чтобы написать чистый, удобный и удобный код, потому что ваше время более ценно, чем время вашего сервера, особенно если оно миллисекунды или меньше. Сначала посмотрите на производительность приложения, и если все в порядке, тогда вы закончите - переходите к другим вещам, которые вы можете делать со своим временем. Если это медленное измерение (простые измерения времени будут делать), чтобы определить, что медленно, а затем только оптимизировать это. Обычно медленный - это какой-то большой беспорядочный выбор из множества таблиц с большим количеством подключений, но не простое обновление, подобное этому. Также имейте в виду, что обновления (обычно) редки, и пользователь может ждать их, поэтому сосредоточьтесь на оптимизации выбранных.

0

вы можете попробовать запустить оба запроса в больших циклах со случайными идентификаторами

0

это то, что я хотел бы использовать .. и actualy это то, что я обычно работают на жидком использовать, когда мне нужно обновить MySQL.

"UPDATE tbl_name SET enabled = 1 WHERE ID = " . $IDs; 

, но если вы действительно хотите, чтобы сравнить это 2 .. я предлагаю вам дать им много ид s o proccess and then you will know which one is the best.. for a single id the preformance is the same.. but i don т думать производительность на 100 id`s будет то же самое. дайте мне знать результат. Спасибо

+0

для 100 IDS У меня нет выбора, кроме как использовать версию IN, если я не хочу запускать вышеуказанный запрос 100 раз за 100 идентификаторов. Очевидно, это было бы неразумно. – Evernoob

1

Если вы хотите быть экономным на циклах процессора и хотите, чтобы производительность проходила с IN. Подумайте об этом так. Вы должны взять 10 предметов в дом соседей ур ..., который будет быстрее? одновременно принимать все 10 или делать это один за другим .. даже если его миллисекунда, умноженная на количество экземпляров, станет значительным.

Только представьте, что произойдет в фоновом режиме, когда вы отправите один запрос в mysql, движок mysql должен скомпилировать каждый запрос, а затем обработать его и не забудьте часть, в которой PHP должен связываться по сети, чтобы отправить ur-запрос на MySQL.

Так что если вы отправляете 10 запросов вместо одного, то умножайте время обработки. Именно поэтому «Views» быстрее, чем стандартные команды select.

Смежные вопросы