如果这是一个非常愚蠢的问题,请原谅,但我是 MySQL 新手。我有一个相当大的数据库(70 GB),结构简单(只有一个表),我打算用它来快速检索记录。可以想象,grep 一个 70GB 的平面文件并不好玩。
在我的第一次尝试中,我创建了一个表(没什么花哨的,1 个 ENUM,4 个无符号 INT 和 2 个 FLOAT)。由于没有索引的数据检索速度很慢,因此我在表中填充了数据后创建了一个索引,方法是使用类似
create index myid_index on mytable (myid) using btree;
之后,一切正常。检索速度对我来说还可以。然后我注意到我对导入的数据做错了,所以我重新开始。这一次,我在实际填充表之前用索引定义了表。这就是我理解应该做的事情的方式。该命令类似于
create table mytable ( ... , myid INTEGER unsigned, ..., index USING BTREE (myid))
当我这样做时,创建了一个索引,但它似乎不起作用,即检索速度很慢。显然没有使用索引。
两个过程的索引大小相同,并且在“explain mytable”视图中的显示完全相同。唯一的区别是只有在导入所有数据后才定义索引才对我有效。
我究竟做错了什么 ?当我们在这里的时候,第二个问题:当我用'create index'命令定义索引时,我必须给它一个名字。这个名字是干什么用的?我不必在查询期间指定它,是吗?