SA-MP Forums Archive
MySQL запросы обрабатываются долго - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: MySQL запросы обрабатываются долго (/showthread.php?tid=555053)

Pages: 1 2


MySQL запросы обрабатываются долго - CamperGTA - 06.01.2015

PHP код:
:):) 



Re: MySQL запросы обрабатываются долго - Stepashka - 06.01.2015

Логи времени выполнения запросов есть, или это беспочвенные обвинения и проблема окажется в вашем коде?


Re: MySQL запросы обрабатываются долго - CamperGTA - 06.01.2015


Это норма?


Re: MySQL запросы обрабатываются долго - CamperGTA - 06.01.2015

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Логи времени выполнения запросов есть, или это беспочвенные обвинения и проблема окажется в вашем коде?
например, в таком случае, текст "Запрос обработан" я получаю только через 5-10 секунд после отправки запроса:
PHP код:
mysql_function_query(cH"SELECT * FROM `accounts` WHERE `name` = 'PlayerName' LIMIT 1"true"Test""d"playerid); 
PHP код:
forward Test(playerid);
public 
Test(playerid)
{
    
SendClientMessage(playerid, -1"Запрос обработан");
    return 
true;

сервер не лагает. хостинг: ру-хостер

попробовал такой же запрос отправить на mysql сервер с другого самп сервера, запрос обработался мгновенно.


Re: MySQL запросы обрабатываются долго - stabker - 06.01.2015

Насколько я помню, логирование, которое в плагине, замедляет запросы (если логируется вообще все, а не только ошибки/предупреждения). Он у вас включен? Если да, то что именно логируется?


Re: MySQL запросы обрабатываются долго - CamperGTA - 06.01.2015

Ошибки, предупреждения


Re: MySQL запросы обрабатываются долго - Stepashka - 06.01.2015

Quote:
Originally Posted by CamperGTA
Посмотреть сообщение

Это норма?
Это вообще ни как не связано с тем что я спросил.
Quote:
Originally Posted by CamperGTA
Посмотреть сообщение
например, в таком случае, текст "Запрос обработан" я получаю только через 5-10 секунд после отправки запроса:
PHP код:
mysql_function_query(cH"SELECT * FROM `accounts` WHERE `name` = 'PlayerName' LIMIT 1"true"Test""d"playerid); 
PHP код:
forward Test(playerid);
public 
Test(playerid)
{
    
SendClientMessage(playerid, -1"Запрос обработан");
    return 
true;

сервер не лагает. хостинг: ру-хостер

попробовал такой же запрос отправить на mysql сервер с другого самп сервера, запрос обработался мгновенно.
Время выполнения запроса и время вызова колбека это не одно и то же, в плагине есть ещё очередь запросов, которая может замедлять вызов.

Индексы в таблицах есть?


Re: MySQL запросы обрабатываются долго - CamperGTA - 06.01.2015

индексов нет


Re: MySQL запросы обрабатываются долго - Daea - 06.01.2015

Ну вот и ответ)
Как думаешь, зачем нужно индексировать данные, когда их много? Нужно делать индексы, будет быстрее, ибо у тебя много данных в БД


Re: MySQL запросы обрабатываются долго - CamperGTA - 06.01.2015

Quote:
Originally Posted by Daea
Посмотреть сообщение
Ну вот и ответ)
Как думаешь, зачем нужно индексировать данные, когда их много? Нужно делать индексы, будет быстрее, ибо у тебя много данных в БД
С индексами еще не доразобрался, можете помочь?
Как сделать индексы для таблицы аккаунтов? большинство запросов делаю через никнейм (WHERE `name`)


Re: MySQL запросы обрабатываются долго - Daea - 07.01.2015

А будет вот так:
Код:
UPDATE `accountz` SET `pAdmin` = '0' WHERE `ID` = '%d'
Где ID - индекс PRIMARY в БД, тем самым данное число уникальное. Дважды сделать ID, например, 2 - не получится


Re: MySQL запросы обрабатываются долго - CamperGTA - 07.01.2015

Quote:
Originally Posted by Daea
Посмотреть сообщение
А будет вот так:
Код:
UPDATE `accountz` SET `pAdmin` = '0' WHERE `ID` = '%d'
Где ID - индекс PRIMARY в БД, тем самым данное число уникальное. Дважды сделать ID, например, 2 - не получится
auto_increment чтоли?


Re: MySQL запросы обрабатываются долго - Stepashka - 07.01.2015

Quote:
Originally Posted by CamperGTA
Посмотреть сообщение
С индексами еще не доразобрался, можете помочь?
Как сделать индексы для таблицы аккаунтов? большинство запросов делаю через никнейм (WHERE `name`)
Установи уникальный индекс на поле `name`.


Re: MySQL запросы обрабатываются долго - CamperGTA - 08.01.2015

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Установи уникальный индекс на поле `name`.
Я правильно делаю?
PHP код:
ALTER TABLE  `tableADD INDEX (  `name` ) 



Re: MySQL запросы обрабатываются долго - Stepashka - 08.01.2015

Quote:
Originally Posted by CamperGTA
Посмотреть сообщение
Я правильно делаю?
PHP код:
ALTER TABLE  `tableADD INDEX (  `name` ) 
У вас что нет никакого клиентского приложения, типа phpmyadmina, для этого?


Re: MySQL запросы обрабатываются долго - Stepashka - 08.01.2015

Нет, на кнопку Уникальный.


Re: MySQL запросы обрабатываются долго - CamperGTA - 08.01.2015

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Нет, на кнопку Уникальный.
Сделать уникальным походу не получится.
Ошибка:
PHP код:
#1062 - Duplicate entry 'Bek_Alfonso' for key 'name_2' 
т.к. я сделал систему аккаунтов чувствительным к регистру
эту проблему можно как-то решить?


Re: MySQL запросы обрабатываются долго - Stepashka - 08.01.2015

Тебе нужно указать полю параметр BINARY, поле станет регистрозависимым, тогда станет возможным включить уникальный индекс.


Re: MySQL запросы обрабатываются долго - CamperGTA - 08.01.2015

ошибся, изменил тип поля на BINARY (а надо было указать атрибут BINARY), потом обратно в VARCHAR, после этого например запрос
PHP код:
SELECT FROM `accountsWHERE BINARY `name` = 'PlayerName' 
возвращает 0 строк, хотя запись с `name` = 'PlayerName' в таблице есть

что делать?


Re: MySQL запросы обрабатываются долго - SoNikMells - 08.01.2015

Тип поля TEXT, кодировка utf8_general_ci, обращаюсь к полю учитывая регистр подобными запросами
PHP код:
SELECT FROM `tableWHERE `nameLIKE BINARY '%e' 
без регистра
PHP код:
SELECT FROM `tableWHERE `nameLIKE '%e' 
можно добавить LIMIT, чтоб после 1-ого найденного совпадения далее не искало
PHP код:
SELECT FROM `tableWHERE `nameLIKE BINARY '%e' LIMIT 1