|
|
|
Как избавится от Using temporary?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Есть две связанные таблицы: список рубрик и список товаров. hdbk_rubrics "id""parentid""lev""rubric_name""path""1"NULL"0""Список рубрик" "1""2""1""1""Электроника и компьютеры""1/2""3""2""2""Телевизоры и видеоаппаратура""1/2/3""4""2""2""Домашние кинотеатры""1/2/4""5""2""2""Фото- и видеокамеры""1/2/5""6""2""2""Сотовые телефоны и аксессуары""1/2/6""7""2""2""Игровые видеоприставки""1/2/7""8""2""2""MP3-плееры и переносные колонки""1/2/8""9""2""2""Автомобильная электроника и GPS""1/2/9""10""2""2""Музыкальные инструменты""1/2/10""11""2""2""Аксессуары для электронных устройств""1/2/11""12""2""2""Ноутбуки и планшеты""1/2/12""13""2""2""Настольные компьютеры и мониторы""1/2/13""14""2""2""Периферийные устройства для компьютеров""1/2/14""15""2""2""Программное обеспечение""1/2/15""16""2""2""Принтеры и чернила""1/2/16""17""2""2""Офисные и школьные принадлежности""1/2/17""18""1""1""Дом и сад""1/18""19""18""2""Кухня и столовая""1/18/19""20""18""2""Мебель и декоративные элементы""1/18/20" catalog "id""idFirm""idRubric""article""idType""name""31632""13""85""BD-010-31632""1""Металлоконструкции""31634""13""85""BD-010-31634""1""Монтаж кровельных систем""31637""13""85""BD-010-31637""1""Монтаж фасадных систем""36553""19""85""BX-010-36553""1""Шифер""36554""19""85""BX-010-36554""1""Цемент""36555""19""85""BX-010-36555""1""Рубероид""36556""19""85""BX-010-36556""1""Электроды сварочные""36557""19""85""BX-010-36557""1""Трубы асбоцементные""36558""19""85""BX-010-36558""1""ДВП""37002""19""85""BX-010-37002""1""Монтаж систем автоматического пожаротушения""37007""19""85""BX-010-37007""1""Монтаж систем силового и слаботочного электроснабжения""37016""19""85""BX-010-37016""1""Техническая экспертиза зданий и сооружений""37762""19""85""BX-010-37762""1""Проектирование зданий и сооружений""37763""19""85""BX-010-37763""1""Проектирование и монтаж волоконно-оптических линий передачи""42537""19""85""BX-010-42537""1""Межевание""42539""19""85""BX-010-42539""1""Строительство монолитных фундаментов""42541""19""85""BX-010-42541""1""Монтаж систем вентиляции""42542""19""85""BX-010-42542""1""Прокол грунта под дорогами" Список рубрик большой и в реальности товары есть не во всех рубриках. Нужен запрос, выводящий список рубрик первого уровня (hdbk_rubrics.lev=1) в которых товары имеются. Написал вот такой запрос: Код: sql 1. 2. 3. 4. 5. Пробовал индексы в разных комбинациях, лучшее связывание, которого смог добиться выглядит вот так: Код: plaintext 1. 2. 3. 4. Но никак не удается избавится от Using temporary, а на копирование во временную таблицу уходит 95% времени, судя по профилированию. Возможно ли в принципе избавится от временной таблице в данном случае? Если да, то как?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 15:33:55 |
|
||
|
Как избавится от Using temporary?
|
|||
|---|---|---|---|
|
#18+
grecha10Нужен запрос, выводящий список рубрик первого уровня (hdbk_rubrics.lev=1) в которых товары имеются.Уточните, "В которых" или "в которых, включая подрубрики," ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 15:44:08 |
|
||
|
Как избавится от Using temporary?
|
|||
|---|---|---|---|
|
#18+
miksoft, да, включая подрубрики. В рубриках верхнего уровня товаров вообще нет, товару может быть присвоен только какой либо из конечных вложенных рубрик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 16:39:37 |
|
||
|
Как избавится от Using temporary?
|
|||
|---|---|---|---|
|
#18+
grecha10В рубриках верхнего уровня товаров вообще нет В смысле, что товару не может быть присвоен idRubric=18, но может быть idRubric=19, на указанных данных. Это пример для наглядности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 16:42:10 |
|
||
|
Как избавится от Using temporary?
|
|||
|---|---|---|---|
|
#18+
Для начала я бы JOIN catalog заменил бы на EXISTS. Вторым этапом, наверное, в этот же EXISTS засунул бы и JOIN hdbk_rubrics rub1. А после этого DISTINCT сам отвалится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 17:03:36 |
|
||
|
Как избавится от Using temporary?
|
|||
|---|---|---|---|
|
#18+
miksoft, это просто пуля. По сравнению с тем что было - выигрыш в скорости в 10 000 раз. Тем не менее, прошу взглянуть - может где то можно допилить, я не спец в sql, а с exists вообще первый раз столкнулся, только что доки прочитал. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. EXPLAIN такой: id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY Rub ref lev_path lev_path 1 const 9 Using where 2 DEPENDENT SUBQUERY c index NULL idRubric 3 NULL 41664 Using where; Using index 3 DEPENDENT SUBQUERY rub1 eq_ref PRIMARY,id_path PRIMARY 2 labstroyinfo.c.idRubric 1 Using where В предыдущей версии запроса мне очень нравился Using index, Distinct в таблице catalog. А здесь полный перебор идет, никак не улучшить? Но все равно получилось значительно(!) быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 18:22:56 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38719522&tid=1834372]: |
0ms |
get settings: |
5ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
66ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 338ms |

| 0 / 0 |
