Упражнение SQL: нужна помощь - PullRequest
0 голосов
/ 07 марта 2019

Придумайте тестовое упражнение, чтобы вы могли мне помочь:

У нас есть две таблицы:

table1:

id: auto_increment (primary key)
number_complete: varchar(255)

table2:

id: auto_increment (primary key)
name: varchar(255)
number_cut: varchar(255)

В каждой таблице есть эти данные:

table1:

enter image description here

table2:

enter image description here

ну действительно в таблице 1 есть более миллиона записей, а во второй таблице 34 тысячи записей.

результат яищет что-то вроде этого:

enter image description here

То, что он выполнял и продолжает выполнять, было это предложение:

select t2.name, count(t1.id) 
from table1 as t1, table2 as t2
where t1.number_complete like concat(t2.number_cut,'%')
group by t2.name;

Нов этот момент я почти 1 час ждал исполнения предложения, как вы понимаете, я не специалист по SQL.

Ответы [ 3 ]

0 голосов
/ 07 марта 2019

Я бы установил поля, которые вы сравниваете, как индексы:

ALTER TABLE `table1` ADD INDEX(`number_complete`);
ALTER TABLE `table2` ADD INDEX(`number_cut`);

Это также должно ускорить поиск.

0 голосов
/ 07 марта 2019

Строковые операции стоят дорого.Если они сделаны в масштабе миллионов, то они становятся чрезвычайно дорогими, и вы будете ждать часами.Решение состоит в том, чтобы избежать строковых операций в ваших фильтрах.

Вам нужно будет задать себе вопрос: как связаны table1 и table2 друг с другом?Они много к одному или много ко многим?Если их много ко многим, вы можете создать таблицу table3 (table1_id, table2_id).Если они много-к-одному, то вы можете создать table2_id для таблицы table1.Это будут числовые поля, которые будут легко фильтроваться и выполнять поиск по.

Вам нужно будет написать скрипт, который будет заполнять новые столбцы.Да, вы будете ждать час или даже больше, но только один раз.После этого поиск будет быстрым.

0 голосов
/ 07 марта 2019

Добавить индекс на number_complete.

ALTER TABLE table1
ADD INDEX (number_complete);

Поскольку индексы по умолчанию являются B-деревьями, это делает сопоставление префиксов достаточно эффективным, и LIKE может воспользоваться этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...