Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Я дурак или хостер врет? (Beebee) 26/04/2011 - 14:12:20
      Re: Проблема решена! (Beebee) 26/04/2011 - 15:21:36
      Re: Я дурак или хостер врет? (admin_spaces_lox) 17/05/2011 - 05:08:59

> Original message text:
> From: Beebee - 26/04/2011 - 14:12:20
> Subject:Я дурак или хостер врет?
> -----------------
> Есть бд, в ней три таблицы: "города", "регионы РФ" и таблица соответствия "город-регион". выглядит это так:
> [city (города)]
> id_city | citynicename | cityname
> 27419 Dmitrov Дмитров
> 27613 Domodedovo Домодедово
> 27626 Zhukovskij Жуковский
> 27602 Zelenograd Зеленоград
> 27514 Sheremetevo Шереметьево
> 27726 Jelektrostal Электросталь
> 27439 Jelektrougli Электроугли
> 27418 Jahroma Яхрома
> 27612 Moscow Москва
>
> [region (регионы)]
> id_region | regionname
> 50 Московская область
> 77 г. Москва
>
> [region2city (таблица-связка)]
> id_region | id_city
> 50 27419
> 50 27613
> 50 27626
> 50 27602
> 50 27514
> 50 27726
> 50 27439
> 50 27418
> 77 27612
>
> далее, когда на входе появляется название города латиницей нужно выдать всю остальную инфу по нему. вот так:
> Zelenograd -> 27602 Зеленоград 50 Московская область
>
> Получившийся SELECT у меня выглядит так:
> SELECT city.id_city, city.cityname, region.id_region, region.regionname FROM `city`, `region`, `region2city` WHERE city.id_city = region2city.id_city AND region.id_region = region2city.id_region AND city.citynicename = 'Zelenograd'
>
> Это все работает, но только на тестовой базе (вот эти 9 городов что я привел в примере выше). Когда городов становится около полутора тысяч на новом хостинге (на старом все работало нормально) мускул ругается на:
> #1104 - The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay
>
> Хостер утверждает что MAX_JOIN_SIZE у него 10млн., проблема на моей стороне, и предлагает оптимизировать запрос к бд. Я в свою очередь не понимаю как оптимизировать запрос который и так проще некуда. Рассудите, пожалуйста, это я не прав и запрос плох и его надо переписывать, или хостер чего-то не договаривает и нужно переезжать к другому?
>


From: Beebee - 26/04/2011 - 15:21:36
Subject:Проблема решена!
-----------------
Проблема решена!
Помог EXPLAIN.
при переносе базы от хостера к хостеру протерялись индексы.
поэтому эксплейн вначале выдавал:

EXPLAIN SELECT city.id_city, city.cityname, region.id_region, region.regionname FROM `city`, `region`, `region2city` WHERE city.id_city = region2city.id_city AND region.id_region = region2city.id_region AND city.citynicename = 'Zelenograd'

table | rows
region | 89
city | 1500
region2city | 1500

Т.е. чтобы грубо оценить сколько строк должен просмотреть MySQL для выполнения запроса:
1500х1500х89 = 200250000 т.е. 200млн.

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

table | rows
region | 89
city | 15
region2city | 1

89х15 = 1335

прямо скажем слегка другой результат.


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
38448



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |