- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Коллеги,
Есть БД MySql, и подобный запрос:
SELECT dle_comments.id, post_id, allow_edit,rating_plus, rating_minus, dle_comments.user_id, dle_comments.date, dle_comments.autor as gast_name, dle_comments.is_deleted, dle_comments.email as gast_email, text, ip, is_register, name, dle_users.email, news_num, dle_users.comm_num, user_group, reg_date, signature, foto, fullname, land, icq, dle_users.xfields, dle_post.title, dle_post.approve, dle_post.date as newsdate, dle_post.alt_name, dle_post.category, dle_post.flag FROM dle_comments LEFT JOIN dle_post ON dle_comments.post_id=dle_post.id LEFT JOIN dle_users ON dle_comments.user_id=dle_users.user_id WHERE dle_comments.approve='1' AND dle_comments.is_deleted='0' AND dle_post.approve=1 ORDER BY id desc LIMIT 272010,10
Запрос очень тяжелый, таблицы очень-очень огромные.
Какие варианты есть для оптимизации?
Помогут ли тут индексы?
Знающие люди, подскажите :)
Чуть-чуть... красивше :)
Какие варианты есть для оптимизации?
Помогут ли тут индексы?
Устанавливаете бесплатную замечательную программу HeidiSQL - это типа phpmyadmin, но в сто раз круче (я даже не поленилась и donation автору отправила).
Получаете отменный user frendly GUIвизуальный доступ к своей БД, к котором можно добавить/удалить индексы, отладить любые SQL-запросы, и посмотреть время их выполнения, импортировать и экспортировать базы, смотреть статистику.
Вбиваете свой запрос туда и отлаживаете его прямо на ваших реальных таблицах. Смотрите explain запроса - какие индексы использует mysql при запросе, создаются ли временные таблицы, ...
PS: Иногда "select from select ..." работает быстрее чем объединение таблиц по join. Но это надо по экспериментировать на реальных таблицах.
PPS: HeidiSQL подключается к БД удалённо, надо чтобы у хостера был открыт наружу порт 3306. И уровень доступа к бд был не localhost(принимать подключения только внутри сервера), а %(с любого IP) или указан конкретный IP
PPPS: Select-ами - не накосячишь, а с запросами delete from table или drop db/drop table - аккуратнее, можно снести всё за 5 сек.
EXPLAIN вставьте перед запросом и покажите результат. Или точнее сделайте запрос в базу
rating_minus, dle_comments.user_id, dle_comments.date,
dle_comments.autor as gast_name,
dle_comments.is_deleted, dle_comments.email as gast_email,
text, ip, is_register, name, dle_users.email, news_num,
dle_users.comm_num, user_group, reg_date, signature, foto,
fullname, land, icq, dle_users.xfields, dle_post.title,
dle_post.approve, dle_post.date as newsdate, dle_post.alt_name,
dle_post.category, dle_post.flag
FROM dle_comments
LEFT JOIN dle_post ON dle_comments.post_id=dle_post.id AND dle_post.approve=1
LEFT JOIN dle_users ON dle_comments.user_id=dle_users.user_id
WHERE dle_comments.approve='1'
AND dle_comments.is_deleted='0'
ORDER BY id desc LIMIT 272010,10
еще результаты:
SHOW INDEX FROM dle_post;
SHOW INDEX FROM dle_comments;
SHOW INDEX FROM dle_users;
---------- Добавлено 14.01.2015 в 18:53 ----------
Вставил результаты
SHOW INDEX FROM dle_post;
SHOW INDEX FROM dle_comments;
SHOW INDEX FROM dle_users;
---------- Добавлено 14.01.2015 в 18:54 ----------
Устанавливаете бесплатную замечательную программу HeidiSQL - это типа phpmyadmin, но в сто раз круче (я даже не поленилась и donation автору отправила).
Получаете отменный user frendly GUIвизуальный доступ к своей БД, к котором можно добавить/удалить индексы, отладить любые SQL-запросы, и посмотреть время их выполнения, импортировать и экспортировать базы, смотреть статистику.
Вбиваете свой запрос туда и отлаживаете его прямо на ваших реальных таблицах. Смотрите explain запроса - какие индексы использует mysql при запросе, создаются ли временные таблицы, ...
PS: Иногда "select from select ..." работает быстрее чем объединение таблиц по join. Но это надо по экспериментировать на реальных таблицах.
PPS: HeidiSQL подключается к БД удалённо, надо чтобы у хостера был открыт наружу порт 3306. И уровень доступа к бд был не localhost(принимать подключения только внутри сервера), а %(с любого IP) или указан конкретный IP
PPPS: Select-ами - не накосячишь, а с запросами delete from table или drop db/drop table - аккуратнее, можно снести всё за 5 сек.
:)
про explain и прочие вещи в курсе.
Вопрос не в жтом, вопрос в том как оптимизировать запрос который в стартовом посте указан :)
---------- Добавлено 14.01.2015 в 18:57 ----------
Результат explain запроса
Запрос нормальный, индексы нужные уже есть. 285889 это не так много, Сколько по времени выполняется запрос?
время выполнения от 0.5 до 10 секунд :(
А если просто запрос без JOIN-ов сделать, долго будет выбирать?
Попробуйте убрать сначала один потом другой JOIN из запроса, посмотреть что получиться только без кеширования типа SELECT SQL_NO_CACHE id, name FROM customer;
ORDER BY id desc LIMIT 272010,10
В этом ваша проблема. Умные люди давно уже придумали сначала отсортировать первичный ключ, потом джоином выбирать остальные записи (на форуме не раз уже обсуждалось эта тема).
Ваш запрос будет выглядеть примерно так:
В этом ваша проблема. Умные люди давно уже придумали сначала отсортировать первичный ключ, потом джоином выбирать остальные записи.
Ваш запрос будет выглядеть примерно так:
Спасибо большое!
Благодарю, запрос переделал, стал работать быстрее, хотя все равно, далеко до идеала...
Возник еще вопрос, что посоветуете со следующим запросом?