- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков
VK приобрела 70% в структуре компании-разработчика red_mad_robot
Которая участвовала в создании RuStore
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Вкратце: перенес бд от одного хостера к другому, работать перестало.
Итак, есть бд, в ней три таблицы: "города", "регионы РФ" и таблица соответствия "город-регион". выглядит это так:
[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млн., никто никогда не жаловался, проблема на моей стороне, и предлагает оптимизировать запрос к бд. Я в свою очередь не понимаю как оптимизировать запрос который и так проще некуда. Рассудите, пожалуйста, это я не прав и запрос плох и его надо переписывать, или хостер чего-то не договаривает и нужно переезжать к другому?
Возможно, EXPLAIN натолкнёт вас на какие-нибудь мысли по поводу оптимизации БД и запросов.
Переписать запрос через JOINы
и сделать индекс citynicename ...
Ну а для начала, как сказали выше, посмотреть что покажет EXPLAIN
Спасибо! EXPLAIN очень помог!
при переносе базы от хостера к хостеру протерялись индексы.
поэтому эксплейн вначале выдавал:
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
что в общем-то небо и земля!