[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Долгий запрос, как ускорить
maximka787
Ребят, вопрос для меня тяжелый, посоветуйте как быть, если знаете. Есть у меня три таблицы профайлы пользователей, страны и города
users (`id`, `name`, `id_country`, `id_city`);  // записей пока 100
country (`id`, `name`); // записей 200
city (`id`, `name`); // записей 1000 с чем то
Все бы ничего, но при наполнении только части!! таблиц, уже упала скорость запросов. Может я не правильно составляю?
SELECT
t1.`name`
FROM
`users` t1,
`country` t2,
`city` t3
WHERE
t1.`id_country` = t2.`id` AND
t1.`id_city` = t3.`id`

Может подсоединением таблиц через LEFT JOIN будет правильней сделать?

_____________
..Работает - не трогай!
Игорь_Vasinsky
может быть. проверь.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
alexbel2404
На t1.`id_country` и t1.`id_city` индексы стоят? Если нет, то поставь
maximka787
Игорь_Vasinsky
В данном случае LEFT JOIN не упростило ничего.

alexbel2404
Да, индексы стоят и типы полей int unsigned.

Странно, через запрос в phpmyadmin быстро выдает список, а через сайт нет. Может быть, буферизация вывода сайта тормозит, тк все же таблица не маленькая.
Ладно подумаю над этим. Спасибо за поддержку.

_____________
..Работает - не трогай!
sergeiss
maximka787 - а "долго выполняется" - это сколько по времени? И каким образом ты измерял время?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
SlavaFr
1) зачем вообще нужно join с таблицами `country` и `city` если ты ищеш только user.name и не используеш не каких ограничений по таблицам country и city?

2)являются ли user.`id_country` и user.`id_city` foreign key таблиц country и city?
еще лучше вышли 'show create table название_таблицы' выше упомянутых таблиц

3) как уже сказано @sergeiss, не известно как и что ты измерял
возможно база мгновенно зделала свою работу, просто считывать все без исклучения имена из таблицы может занять время и output-buffer.

_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
Invis1ble
смотри explain'ом план выполнения
кстати, я тут пару дней назад случайно наткнулся на фичу в pma - "профилировать" вроде называется. Так вот, там показаны в виде графика сколько времени занимают различные этапы выполнения запроса - оч. интересная штука =)

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

killer8080
Цитата (maximka787 @ 19.11.2012 - 14:48)
Странно, через запрос в phpmyadmin быстро выдает список, а через сайт нет.

Скорей всего проблема не в этом запросе, а в другом месте.
maximka787
Да ребят. я разобрался, проблема видимо в буферизации. Сам то запрос выполняется за 0.05 сек, а на сайте расставив время выполнения в разных местах, понял, что сайт выполняется 1,2 секунды как раз между выводом всех городов в <select>options а их там много. Видимо это буферизация и не вмещает сразу все.

SlavaFr
очень интересный и непонятный вопрос.
Цитата

2)являются ли user.`id_country` и user.`id_city` foreign key таблиц country и city?
еще лучше вышли 'show create table название_таблицы' выше упомянутых таблиц

у меня тип данных MyISAM, внешние ключи там не задействованы, там связь идет по ключам через id_country - id, id_city - id. Связь только логическая, комп не знает что это связующие поля. Разве это не ключи? smile.gif

Вот структура, от руки написал)

Цитата
[users]
`id` int unsigned not null primary key,
`id_country` int unsigned not null,
`id_city` int unsigned not null

[country]
`id` int unsigned not null primary key,
`id_name` varchar(100)

[city]
`id` int unsigned not null primary key,
`id_name` varchar(100)


_____________
..Работает - не трогай!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.