Ах... MySQL
По тексту запросов сразу можно сказать, что можно сделать поэффективнее.
Три обращения объединяем в 1, и получаем почти 3х кратную экономию в передаче, инициализации, обработке и финализации запросов, и логгинга тоже.
Самый эффективный путь - испосльзовать Replace Into ,
НО применим если используется поиск по primary key или unique field. Ты можешь сделать url как unique или primarily key или foreign key. Синтаксис:
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
VALUES ({expression | DEFAULT},...),(...),...
Если такая запись уже есть (с тем же unique или key) то она будет обновлена, иначе - сработает просто как insert. Возвращаемое значение: 1 или 2 - новый инсерт или замещен старый. Вообщето, замещения как такового не происходит, а происходит инсерт с одновременным удалением старого. Поэтому отсюда главный недостаток - надо передавать все значения для строки (или уаказать где использовать DEFAULT). Это не совсем эффективно в случае, если надо изменить только 1 поле.
Если это не устраивает или юник или key сделать невозможно тогда так.
Из 3х запросов делаем один комбинированный. Синтаксис в примере для MS SQL (tSQL), но MySQL это все "знает":
code text
if exists (SELECT * FROM avia_top_pages WHERE url='$url')
INSERT INTO avia_top_pages (url,count,start,last)
VALUES ('$url',1,UNIX_TIMESTAMP(),UNIX_TIMESTAMP())
else
UPDATE avia_top_pages SET start=start, count=count+1,
last=UNIX_TIMESTAMP() WHERE url='$url'
Оба варианта заметно быстрее твоего существующего, а из этих 2х - Replace into наверное чуть побыстрее (незначительно). Ты можешь посмотреть время исполнения.