Как оптимизировать запрос к базе данных MySQL?

123
[Удален]
#11
iputin:
Mr.Boba, еси работаете на localhost то попробуйте получить вот такую переменную
$sqlQ = mysql_query("show status like '%Questions%'");
$sqlN = mysql_num_rows($sqlQ);
$sq = 0;
while ($sq < $sqlN) {
$sq++;
$sql = mysql_fetch_assoc($sqlQ);
print 'Запросов ' . $sql['Variable_name'] . ': ' . $sql['Value'];
}

у меня возники сомнения что запрос у вас в данном сучае всего 1
а вообще я юзаю счетчики в купе со временем генерации и подсчетом испоьзованной памяти может там ответ найдете

Я оценивал только этот запрос

print 'Запросов ' . $sql***91;'Variable_name'***93; . ': ' . $sql***91;'Value'***93;;

говорит здесь ошибка - неожиданый знак "*"

A
На сайте с 19.07.2010
Offline
130
#12

форум испортил код...

код выше выглядит так:

$sqlQ = mysql_query("show status like '%Questions%'");

$sqlN = mysql_num_rows($sqlQ);
$sq = 0;
while ($sq < $sqlN) {
$sq++;
$sql = mysql_fetch_assoc($sqlQ);
print 'Запросов ' . $sql['Variable_name'] . ': ' . $sql['Value'];
}
.............
A1
На сайте с 04.09.2013
Offline
18
#13
Mr.Boba:
И где смотреть результат этого запроса?

Эм... в консоли MySQL, собственно. Судя по всему, где-то вы не там его выполняете, где это принято обычно.

[Удален]
#14
abbat13:
Эм... в консоли MySQL, собственно. Судя по всему, где-то вы не там его выполняете, где это принято обычно.

я делаю запрос из закладки SQL в PHPMyAdmin

---------- Добавлено 10.12.2013 в 20:50 ----------

admak:
форум испортил код...

код выше выглядит так:
$sqlQ = mysql_query("show status like '%Questions%'");
$sqlN = mysql_num_rows($sqlQ);
$sq = 0;
while ($sq < $sqlN) {
$sq++;
$sql = mysql_fetch_assoc($sqlQ);
print 'Запросов ' . $sql['Variable_name'] . ': ' . $sql['Value'];
}

Ответ: "Запросов Questions: 2"

iputin
На сайте с 26.11.2013
Offline
4
#15

Mr.Boba,

ну тогда давайте посмотрим может пыхе трудно


if(function_exists('memory_get_peak_usage'))
echo "Пик испльзования памяти: " . round((memory_get_peak_usage() / 1024),2) . " Kb <br />";
[Удален]
#16
iputin:
Mr.Boba,
ну тогда давайте посмотрим может пыхе трудно

if(function_exists('memory_get_peak_usage'))
echo "Пик испльзования памяти: " . round((memory_get_peak_usage() / 1024),2) . " Kb <br />";

ответ - 5719.9 Kb. Походу не в этом причина

iputin
На сайте с 26.11.2013
Offline
4
#17
Mr.Boba:
ответ - 5719.9 Kb. Походу не в этом причина

ну по мне таки не мало на один запрос

давайте тогда мерить время

в начало файла

$tstart=microtime(1); // Засекаем начальное время

прямо перед самим запросом, потом после запроса и уже в конце страницы

$tlow=microtime(1);
echo "Прошло время сначала: " .round(($tlow-$tstart),5) . " сек.<br />";

просто если PhpMyAdmin сказал что меньше секунды то оно так и есть, больше чем уверен что дело в php и вам надо засунуть то что вы делаете в php в SQL

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

---------- Добавлено 10.12.2013 в 22:24 ----------

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

юзайте DBSimple и будет вам счастье

[Удален]
#18
iputin:
ну по мне таки не мало на один запрос

давайте тогда мерить время
в начало файла
$tstart=microtime(1); // Засекаем начальное время


прямо перед самим запросом, потом после запроса и уже в конце страницы
$tlow=microtime(1);

echo "Прошло время сначала: " .round(($tlow-$tstart),5) . " сек.<br />";

просто если PhpMyAdmin сказал что меньше секунды то оно так и есть, больше чем уверен что дело в php и вам надо засунуть то что вы делаете в php в SQL

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

---------- Добавлено 10.12.2013 в 22:24 ----------

да и собственно ворпрос, а зачем вы начали изобретать собственнй класс для запросом в базу?
юзайте DBSimple и будет вам счастье

Засекал еще до того, как обрабатывал данные: был только запрос и while ( $row = $db->get_row() ) {} и уже тогда 18 секунд.

А в phpMyAdmin оно только в зеленом квадратике над запросом пишет "Отображает строки 0 - 2566 ( 2,567 всего, Запрос занял 0.0015 сек.)", а фактически этот процесс так и занимает 18 секунд.

А касательно класса, то он не мой. Сайт просто был сделан на ДЛЕ, вот и класс ихний.

siv1987
На сайте с 02.04.2009
Offline
427
#19
Mr.Boba:
а фактически этот процесс так и занимает 18 секунд.

У вас это подразумевается один процесс, а мы говорим о разных процессах. Запрос - это один, а обработка запроса - это другой процесс. В ДЛЕ худо бедо есть кое какая отладочная информация. Включите логи медленных запросов, включите время выполнения запросов, изучайте какая обработка проводятся с этими данными - вам об этом выше десять раз уже сказали. Не плохо бы еще и xdebug подключить и профилировать исполнения скрипта. Какой же это "коммерческий" проект если вы тупо продебажить код не можете, или обратитесь к его автору, или наймите специалиста, либо пилите что у вас там.

[Удален]
#20

Извините, это я затупил, так как в коде 4 раза используется функция array_intersect и она забирает все время.

Но в любом случае всем спасибо за помощь.

Может есть альтернатива этой функции?

И даже не так, мне надо только количество одинаковых элементов 2 массивов.

123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий