SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 30.04.2010 14:31:29

cooler
Завсегдатай
Зарегистрирован: 14.01.2010
Сообщений: 52

конструкция in

Здравствуйте. есть таблица с 5млн. записей. У нее есть поле id(PK). Мне нужно удалить например 5 id. Как будет быстрее?
DELETE FROM tabl WHERE id in(2,34,5,6,7)
------------------------------------------------
DELETE FROM tabl WHERE id=2 LIMIT 1;
DELETE FROM tabl WHERE id=34 LIMIT 1;
DELETE FROM tabl WHERE id=5 LIMIT 1;
DELETE FROM tabl WHERE id=6 LIMIT 1;
DELETE FROM tabl WHERE id=7 LIMIT 1;
------------------------------------------------
И если можно объясните как работает изнутри конструкция IN? Заранее благодарен.

Неактивен

 

#2 30.04.2010 17:34:31

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: конструкция in

Будут работать приблизительно с одной скоростью, но первое проще. IN работает
так же, как и = (т.е. может использовать индекс), но результатом индекса будет
RANGE, поэтому последующие части индекса использоваться не будут.

Ну и во втором случае LIMIT лишние, если id — это уникальные ключи.

Неактивен

 

#3 30.04.2010 21:23:08

cooler
Завсегдатай
Зарегистрирован: 14.01.2010
Сообщений: 52

Re: конструкция in

но результатом индекса будет
RANGE, поэтому последующие части индекса использоваться не будут

Если можно, разъясните пожалуйста подробнее.

Неактивен

 

#4 01.05.2010 00:53:03

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: конструкция in

Допустим, у Вас есть таблица со столбцами a и b и с индексом на (a,b).
В случае, когда Вы делаете запрос WHERE a = 1 AND b = 2, используется
индекс целиком. В случае, когда Вы делаете WHERE a IN (1, 2) AND b = 2,
используется только первая часть индекса.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson