mysql - 替代/高效/优化查询

时间:2010-12-01 03:36:30

标签: mysql

我想要以下查询的替代/有效/优化查询:

表:

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

非常感谢您的帮助

此致

1 个答案:

答案 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 ..
...