【发布时间】:2012-08-19 01:07:23
【问题描述】:
我目前正在从事一个项目,该项目涉及更改存储在 MYSQL 数据库中的数据。由于我正在处理的表没有键,因此我使用以下命令添加键:
ALTER TABLE deCoupledData ADD COLUMN MY_KEY INT NOT NULL AUTO_INCREMENT KEY
由于我想根据所选字段对记录进行分组,因此我尝试为包含 MY_KEY 以及所选字段的表 deCoupledData 创建一个索引。例如,如果我想使用字段 STATED_F 和 NOT_STATED_F,我输入:
ALTER TABLE deCoupledData ADD INDEX (MY_KEY, STATED_F, NOT_STATED_F)
真正的问题是我通常使用的字段超过 16 个,因此 MYSQL 不允许超键长于 16 个字段。 总之,还有其他方法可以做到这一点吗?我可以(以某种方式)制作 MYSQL 来根据所需的超级键(类似于集群)对记录进行排序吗?我真的需要让我的脚本更快,主要开销是每个组可能包含未存储在磁盘同一页面上的记录,并且我假设我的电脑启动随机 I/O 以检索记录。
感谢您的宝贵时间。 尼克·卡齐波拉基斯
CREATE TABLE deCoupledData (
AA double NOT NULL DEFAULT '0',
STATED_F double DEFAULT NULL,
NOT_STATED_F double DEFAULT NULL,
MIN_VALUES varchar(128) NOT NULL DEFAULT '-1,-1',
MY_KEY int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (MY_KEY),
KEY AA (AA) )
ENGINE=InnoDB AUTO_INCREMENT=74358 DEFAULT CHARSET=latin1
【问题讨论】:
-
听说过“过度索引”吗?请发送
SHOW CREATE TABLE deCoupledData并发布结果。也不要混淆关键字KEY和PRIMARY KEY,一个简单的KEY是INDEX的同义词,所以我猜你甚至没有主键。 -
创建表
deCoupledData(AAdouble NOT NULL DEFAULT '0',STATED_Fdouble DEFAULT NULL,NOT_STATED_Fdouble DEFAULT NULL,MIN_VALUESvarchar(128) NOT NULL DEFAULT ' -1,-1',MY_KEYint(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (MY_KEY), KEYAA(AA) ) ENGINE=InnoDB AUTO_INCREMENT=74358 DEFAULT CHARSET=latin1 -
另外我不知道如何编辑它看起来像 sql 代码。因此,对于给您带来的不便,我深表歉意。
-
我认为您真正的问题是:“如何使我的 SQL 查询更快?”。索引并不总是答案。有时表格布局就是答案。您可能应该发布一个包含实际 SQL 查询、表布局和性能问题的新问题。
标签: mysql