我可以将两列彼此独特吗?

时间:2012-02-20 20:00:48

标签: mysql

抱歉,我只是在玩mysql并在学习的同时学习。这是我的问题。我有一个数字值的表(在python中)(例如{3:1,3:2,3:3})。我想使用数据库作为这些变量的持久性存储(因为它们不完全适合内存)但我想尽可能快地使它。

目前我只是在mysql中使用一个列(索引),并且字典中的每个条目都有自己的行。我想试着看看如果我使用两列INT而不是CHAR列,我是否可以加快读/写速度,但我需要两列彼此都是唯一的。在上面的示例中,所有数据都是唯一的,如果我添加另一个3 = 1,那么它只会覆盖现有值,但3 = 4会创建一个新条目。我怎样才能在mysql中复制它?

我的关于加速的逻辑是否有意义,或者两列上的选择实际上最终会比拥有一列更加昂贵?

我正在从头开始构建这个,所以你不必在我现有的解决方案中工作,我可以非常灵活地采取任何有效的方法。

谢谢!

3 个答案:

答案 0 :(得分:4)

简短版本是您可以在唯一索引中拥有多个列

// Create the test table
CREATE TABLE testTable (
    col1 INT UNSIGNED NOT NULL,
    col2 INT UNSIGNED NOT NULL,
    col3 VARCHAR NOT NULL,
    PRIMARY KEY (col1,col2)
);

这将在表testTable上添加名为uniqueOnCol1AndCol2的列。然后,您可以按如下方式使用INSERT查询

INSERT INTO testTable (
    col1,
    col2,
    col3
) VALUES (
    3,
    1,
    'Original value'
) ON DUPLICATE KEY UPDATE
col1 = VALUES(col1)

这会将(3,1,'原始值')插入testTable。跟进

INSERT INTO testTable (
    col1,
    col2,
    col3
) VALUES (
    3,
    1,
    'New value'
) ON DUPLICATE KEY UPDATE
col1 = VALUES(col1)
然后

将覆盖col3并使其成为“新值”

答案 1 :(得分:2)

要使一对列唯一,请在两列上声明唯一索引。 像这样的东西:

create unique index myindex on mytable( col1, col2 )

答案 2 :(得分:1)

两个列使用UNIQUE约束,并使用REPLACE代替INSERT。不确定您所谈论的性能优势以及varchar来自何处。