powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос
6 сообщений из 6, страница 1 из 1
Помогите оптимизировать запрос
    #38404204
Gfer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Помогите, пожалуйста, с оптимизацией запроса.
Есть таблица с товарами. Товары можно объединить в модели по артикулу SUBSTRING(article,1,6).
Нужно сделать запрос с выводом всех моделей, при этом товары, входящие в данные модели должны иметь минимальную стоимость.

Вот мой запрос:
SELECT c.id as id, name, article, count, price, status FROM goods as c WHERE id = (SELECT id FROM goods as d WHERE SUBSTRING(d.article,1,6) = SUBSTRING(c.article,1,6) AND (count != 0) ORDER BY price ASC LIMIT 1) ORDER BY status LIMIT 0, 24;

Проблема в том, что такой запрос выполняется несколько секунд. Это очень долго. Добавление индексов не ускорило выполнение запроса.
Есть более оптимальны способ?

Заранее большое спасибо.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38404251
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GferДобрый день.

Помогите, пожалуйста, с оптимизацией запроса.
Есть таблица с товарами. Товары можно объединить в модели по артикулу SUBSTRING(article,1,6).
Нужно сделать запрос с выводом всех моделей, при этом товары, входящие в данные модели должны иметь минимальную стоимость.

Вот мой запрос:
SELECT c.id as id, name, article, count, price, status FROM goods as c WHERE id = (SELECT id FROM goods as d WHERE SUBSTRING(d.article,1,6) = SUBSTRING(c.article,1,6) AND (count != 0) ORDER BY price ASC LIMIT 1) ORDER BY status LIMIT 0, 24;

Проблема в том, что такой запрос выполняется несколько секунд. Это очень долго. Добавление индексов не ускорило выполнение запроса.
Есть более оптимальны способ?

Заранее большое спасибо.

1. форматируйте запросы (например http://sqlformat.appspot.com/ ),
трудночитаемые запросы вызывают раздражение.

2. посмотрите здесь:
http://www.sql.ru/forum/687908/faq-vyborka-pervoy-posledney-zapisi-v-gruppah

3. SUBSTRING(d.article,1,6) = SUBSTRING(c.article,1,6)
скорее вего полностью убивает возможность использования индекса.
(ну и тормоза соответсвено).

Сделайте отдельно поле из первых 6 букв и тогда сравнения
будут идти по индексу.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38404468
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gfer,

добавьте поля по нужным вырезкам, прооиндексируйте их и уберите подзапросы с SUBSTRING(). Если этого нельзя сделать - лучше врядли получится.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38406274
Gfer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbcGferДобрый день.

Помогите, пожалуйста, с оптимизацией запроса.
Есть таблица с товарами. Товары можно объединить в модели по артикулу SUBSTRING(article,1,6).
Нужно сделать запрос с выводом всех моделей, при этом товары, входящие в данные модели должны иметь минимальную стоимость.

Вот мой запрос:
SELECT c.id as id, name, article, count, price, status FROM goods as c WHERE id = (SELECT id FROM goods as d WHERE SUBSTRING(d.article,1,6) = SUBSTRING(c.article,1,6) AND (count != 0) ORDER BY price ASC LIMIT 1) ORDER BY status LIMIT 0, 24;

Проблема в том, что такой запрос выполняется несколько секунд. Это очень долго. Добавление индексов не ускорило выполнение запроса.
Есть более оптимальны способ?

Заранее большое спасибо.

1. форматируйте запросы (например http://sqlformat.appspot.com/ ),
трудночитаемые запросы вызывают раздражение.

2. посмотрите здесь:
http://www.sql.ru/forum/687908/faq-vyborka-pervoy-posledney-zapisi-v-gruppah

3. SUBSTRING(d.article,1,6) = SUBSTRING(c.article,1,6)
скорее вего полностью убивает возможность использования индекса.
(ну и тормоза соответсвено).

Сделайте отдельно поле из первых 6 букв и тогда сравнения
будут идти по индексу.

Спасибо! Попробую.

1. Прошу прощения, не знал о такой возможности. Добавлю к себе в инструменты.

2. Почитаю.

3. В документации написано, что можно сделать индекс по определенной длине поля. Сделал INDEX `index_article` (`article`(3)), но ускорения никакого.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38406275
Gfer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arhat109Gfer,

добавьте поля по нужным вырезкам, прооиндексируйте их и уберите подзапросы с SUBSTRING(). Если этого нельзя сделать - лучше врядли получится.

Спасибо за идею.
...
Рейтинг: 0 / 0
Помогите оптимизировать запрос
    #38406496
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GferВ документации написано, что можно сделать индекс по определенной длине поляЭто всего лишь уменьшит размер индекса, но никак не скажется на его использовании в запросах с субстрингами.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]