我想要以下查询的替代/有效/优化查询:
表:
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'
基本上我必须根据2个字段(id1,id2)值更新字段的值。这两个字段可以超过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
非常感谢您的帮助
此致
答案 0 :(得分: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 ..
...