2014-12-05 2 views
-6
$remainingQuery = "select * from $value s 
where not exists (
    select userID from userLocations ul 
    where ul.userID = s.userID 
    ) AND (userIP > '') GROUP BY userIP LIMIT 1"; 
$remainingResults = mysql_query($remainingQuery) or die(mysql_error()); 

Приведенный выше код выполняет очень медленно. Кто знает, почему?Производительность MySql очень медленная

Информация о пользователе userLocations.

enum('ipv4', 'ipv6') latin1_swedish_ci 
ip_start varbinary(16) 
ip_end varbinary(16) 
country char(2) 
stateprov varchar(80) 
city varchar(80) 

Вот одна из таблиц, которые названы в $ значения

name varchar(20) 
score bigint(20) 
log longtext 
difficulty int(10) 
games int(11) 
checkSum text 
bought tinyint(1) 
time timestamp 
bundle int(11) 
userID text 
userIP text 
city text 
country text 
+0

Я добавил дополнительную информацию, вам нужно что-нибудь еще? – Runar

+0

Как медленно * очень медленно *? – AdamMc331

+0

10 секунд или около того, как правило, загрузка страницы и ее получение занимает всего 0,5 секунды, в основном из-за моего медленного подключения к моему серверу. – Runar

ответ

0

Я вижу несколько вещей с вашим запросом. Во-первых, вы группируете userIP и ограничиваете на 1. Это вернет только один userIP, это то, что вы действительно хотите? Как вы узнаете, какой userIP возвращается?

Возможно, использование NOT IN будет быстрее, чем у вас есть?

SELECT * 
FROM table s 
WHERE s.userID NOT IN (SELECT userId FROM userLocations) AND (userIP > '') 
GROUP BY userIP 
LIMIT 1; 
+0

все еще очень медленный. Я не знаю, что вызывает его – Runar

+0

Я подумал, что я просто подумал, что я сделаю снимок. Вероятно, я удалю этот ответ, потому что, возможно, происходит что-то еще. – AdamMc331

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