Правильно ли оформлен запрос MySQL?

#mysql #ubuntu #amazon-ec2

#mysql #ubuntu #amazon-ec2

Вопрос:

Я пытаюсь выполнить следующий запрос в экземпляре AWS ec2 xlarge:

 mysql> CREATE TABLE 3 SELECT * FROM TABLE 2 WHERE ID IN (SELECT ID FROM TABLE1);
  

Я попытался использовать ec2, поскольку подумал, что, возможно, это мой ноутбук делает запрос, занимающий много времени, поскольку в таблице 1 14000 строк и 6 столбцов, а в таблице 2 около 1 миллиона строк и 11 столбцов. Однако я получаю:

Ошибка записи: сломанный канал

При использовании экземпляра aws и тайм-аута СУБД на моем ноутбуке.

Должен ли запрос принимать>, чем эти триггеры тайм-аута? В любом случае, чтобы сформулировать запрос лучше?

Комментарии:

1. Почему это отклонено? Я неправильно сформулировал вопрос?

2. есть странные люди, которые не голосуют без мотивации, … не волнуйтесь

3. справедливо, просто хочу убедиться, что я не нарушил никаких правил форума

4. Нет… ваш вопрос .. правильный и корректный .. предложенный .. иногда .. кто-то .. посмотрите и проголосуйте без мотивации .. .. терпение

Ответ №1:

MySQL очень плохо выполняется WHERE table1.id IN (SELECT table2.id ...) . Лучше использовать JOIN .

 CREATE TABLE Table3
SELECT t2.*
FROM Table2 AS t2
JOIN Table1 AS t1 ON t1.id = t2.id
  

Комментарии:

1. должен ли я выбирать все строки (t1. *), если мне нужен только столбец ID?

2. Вы должны выбрать те столбцы, которые вы хотите вставить Table3 . Я использовал SELECT t1.* , потому что у вашего вопроса есть SELECT * .

3. У меня был Table1 и Table2 обратный ответ на ваш вопрос, я это исправил.

4. Прошло более 10 минут, и процесс все еще выполняется, это типичное поведение для MySQL?

5. Убедитесь, что в обеих таблицах есть индексы в id столбце.

Ответ №2:

Попробуйте логически разделить запрос

 CREATE TABLE3 
SELECT * 
FROM TABLE2 
WHERE ID IN (SELECT ID FROM TABLE1 where id between 1 and 10000);
  

и затем

 insert into table3
SELECT * 
FROM TABLE2 
WHERE ID IN (SELECT ID FROM TABLE1 where id between 10001 and 20000);  
  

Комментарии:

1. Спасибо, я дам вам знать, что произойдет.

2. ИСПОЛЬЗУЙТЕ CT -A; Чтение информации таблицы для завершения имен таблиц и столбцов Вы можете отключить эту функцию, чтобы ускорить запуск с помощью -A

3. Когда я выполняю это, все равно требуется вечность, чтобы открыть базу данных … поскольку это довольно мощный экземпляр, является ли такое поведение нормальным для MySQL?

4. @Stacksofoverflow я не понимаю вашего комментария .. пожалуйста, объясните лучше

5. мои извинения, были некоторые фоновые процессы, которые пришлось убить