mysql - альтернативный / эффективный / оптимизированный запрос

0

Я хочу альтернативный/эффективный/оптимизированный запрос для следующего запроса:

Таблица:

CREATE TABLE `bartco_web_vms_studio`.`table_name` (
      `index` INT( 10 ) NOT NULL AUTO_INCREMENT ,
      `id1` INT( 10 ) NOT NULL DEFAULT '0',
      `id2` VARCHAR( 10 ) NOT NULL,
      `f3` TINYINT( 4 ) NOT NULL DEFAULT '0',
      PRIMARY KEY ( `index` )
) ENGINE = MYISAM ;

Составной индекс:

CREATE INDEX id1_id2 ON tablename (id1, id2);

Число строк = 7891

Обновить запрос:

UPDATE table_name 
SET f3=1 
WHERE id1=1 AND id2='a' 
   OR id1=2 AND id2='b'
   OR id1=3 AND id2='c'

В основном мне нужно обновить значение поля на основе двух полей (id1, id2). Эти 2 поля могут быть в более чем 1 паре.

Выход из EXPLAIN SELECT f3 FROM table_name WHERE ...:

id -> 1,
select type -> SIMPLE,
table -> table_name,
type -> range,
possible_keys -> id1_id2,
key -> id1_id2,
key_len -> 261,
ref -> NULL,
rows -> 2,
Extra -> Using where

Большое спасибо за помощь

Привет

  • 1
    У вас есть индекс для id1, id2?
  • 0
    @ InSane - хороший вопрос, +1. Чтобы расширить это, идеальный индекс включает в себя как id1, так и id2 в одном индексе. Просто хотел заявить, что это вопрос для начинающих.
Показать ещё 14 комментариев
Теги:

1 ответ

2
Лучший ответ

Составной индекс id1 + id2 и запрос

WHERE (id1, id2) IN ((1, 'a'), (2, 'b'), (3, 'c'))

должен помочь

Кроме того, когда вы даже тестируете - добавьте больше строк в таблицу.

Поскольку вы выбираете 3 строки из 9 - mysql может решить никогда не использовать индекс вообще.

UPD

Если ничего из наших ответов не поможет - вы всегда можете разделить свой запрос на 3:

SELECT * FROM table WHERE id1 .. AND id2 ..
UNION
SELECT * FROM table WHERE id1 .. AND id2 ..
...
  • 0
    Спасибо за ответ. Этот запрос оптимизирован? Я имею в виду, у меня могут быть огромные данные в таблице, так будет ли это работать быстрее или тот, который я сказал ???
  • 0
    @ user427969: да, это должно быть лучше. Просто заполните свою таблицу случайными данными и проверьте это.
Показать ещё 19 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню