Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.10.2010, 15:37
Аватар для Jekel
Профессор
Отправить личное сообщение для Jekel Посмотреть профиль Найти все сообщения от Jekel
 
Регистрация: 20.11.2009
Сообщений: 257

Слишком большое время обработки php+sql
Здравствуйте, написал кодец, но время обработки у него 250+ ms ... проблемма в том, что каждых 100ms к нему за ответом обращается 'ajax'....надо php'шный код оптимизировать что-ли как-то...это реально тут сделать? Тупит из-за большого обьема БД...сейчас там 1500записей. Когда было 120 - не тупило(((
вобщем, помогите пожалуйста максимально оптимизировать код..
код:
$userdat = mysql_fetch_assoc(mysql_query("SELECT * FROM users WHERE id='".$_POST["plid"]."'"));

$count = 0;

for ($y=$userdat["y"]-5; $y<=$userdat["y"]+5; $y++){
	for ($x=$userdat["x"]-5; $x<=$userdat["x"]+5; $x++){
			$data_map = mysql_fetch_assoc(mysql_query("SELECT * FROM map WHERE loc='".$userdat["loc"]."' AND x='".$x."' AND y='".$y."'"));
			if($data_map["img"]!="" && $data_map["img"]!=NULL){
				if($_SESSION["x".$count]!=$data_map["img"]){
					$map.="<d".$count.">".$data_map["img"]."</d".$count.">";
					$_SESSION["x".$count]=$data_map["img"];
				}
			}else{
				if($_SESSION["x".$count]!="0"){
					$map.="<d".$count.">0</d".$count.">";
					$_SESSION["x".$count]="0";
				}
			}
			$count+=1;
	}
}
Ответить с цитированием
  #2 (permalink)  
Старый 19.10.2010, 15:45
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,233

индексы по полям x,y,loc расставил?
Ответить с цитированием
  #3 (permalink)  
Старый 19.10.2010, 15:52
Аватар для Jekel
Профессор
Отправить личное сообщение для Jekel Посмотреть профиль Найти все сообщения от Jekel
 
Регистрация: 20.11.2009
Сообщений: 257

не имею понятия как это и что это, вот сейчас чту сижу...спасибо за наводку)
Ответить с цитированием
  #4 (permalink)  
Старый 19.10.2010, 16:13
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Ещё про join заодно почитай.
Ответить с цитированием
  #5 (permalink)  
Старый 19.10.2010, 19:22
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Возможно есть смысл сделать выборку из map одним запросом.
Ответить с цитированием
  #6 (permalink)  
Старый 19.10.2010, 20:23
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

[sql]SELECT * FROM users RIGHT JOIN map ON map.y BEETWEEN users.y-5 AND users.y+5 AND map.x BEETWEEN users.x-5 AND users.x+5 WHERE id={$id} ORDER BY map.x, map.y[/sql] Что-то вроде этого, проверить не смогу.
Ответить с цитированием
  #7 (permalink)  
Старый 19.10.2010, 22:55
Аватар для Jekel
Профессор
Отправить личное сообщение для Jekel Посмотреть профиль Найти все сообщения от Jekel
 
Регистрация: 20.11.2009
Сообщений: 257

хм, спасибо..ща буду чет колупать
Ответить с цитированием
  #8 (permalink)  
Старый 20.10.2010, 01:13
Аватар для Jekel
Профессор
Отправить личное сообщение для Jekel Посмотреть профиль Найти все сообщения от Jekel
 
Регистрация: 20.11.2009
Сообщений: 257

проиндексировал....было так:
Код:
CREATE TABLE `map` (
`id` int NOT NULL AUTO_INCREMENT,
`loc` char(255) default NULL,
`x` int default NULL,
`y` int default NULL,
`img` char(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;[/CSS]
стало так:
Код:
CREATE TABLE `map` (
`id` int NOT NULL AUTO_INCREMENT,
`loc` char(255) default NULL,
INDEX i_loc(loc(20)),
`x` int(11) default NULL,
INDEX i_x(x),
`y` int(11) default NULL,
INDEX i_y(y),
`img` char(255) default NULL,
`about` longtext,
`wall` int(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
может есть лучше варианты?
Ответить с цитированием
  #9 (permalink)  
Старый 20.10.2010, 02:44
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,233

с учетом поправок B@rmaley.e><e, и subzey, данная таблица должна показывать хорошее время запроса.
если нет, то почему вы не написали, результаты нового тестирования?
PS ваша база микроскопическая вообще-то.
я бы посоветовал проверять на большой базе
Ответить с цитированием
  #10 (permalink)  
Старый 20.10.2010, 03:27
Аватар для Jekel
Профессор
Отправить личное сообщение для Jekel Посмотреть профиль Найти все сообщения от Jekel
 
Регистрация: 20.11.2009
Сообщений: 257

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

Последний раз редактировалось Jekel, 20.10.2010 в 03:47.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск