抱歉,我只是在玩mysql并在学习的同时学习。这是我的问题。我有一个数字值的表(在python中)(例如{3:1,3:2,3:3})。我想使用数据库作为这些变量的持久性存储(因为它们不完全适合内存)但我想尽可能快地使它。
目前我只是在mysql中使用一个列(索引),并且字典中的每个条目都有自己的行。我想试着看看如果我使用两列INT而不是CHAR列,我是否可以加快读/写速度,但我需要两列彼此都是唯一的。在上面的示例中,所有数据都是唯一的,如果我添加另一个3 = 1,那么它只会覆盖现有值,但3 = 4会创建一个新条目。我怎样才能在mysql中复制它?
我的关于加速的逻辑是否有意义,或者两列上的选择实际上最终会比拥有一列更加昂贵?
我正在从头开始构建这个,所以你不必在我现有的解决方案中工作,我可以非常灵活地采取任何有效的方法。
谢谢!
答案 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
来自何处。