MySql中“二级索引”的定义怎么样的?

fbling11 2011-11-16 11:51:29
MySql中“二级索引”的定义怎么样的?它和PRIMARY KEY有什么区别呢?
...全文
552 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2011-11-17
  • 打赏
  • 举报
回复
对应的中文版帮助内容如下。 innodb 中有CLUSTER INDEX和非CLUSTER INDEX

[Quote]15.2.6.2. 转换MyISAM表到InnoDB
要点:你不应该在mysql数据库(比如,user或者host)里把MySQL系统表转换为InnoDB类型。系统表总是MyISAM型。

如果你想要所有(非系统)表都被创建成InnoDB表,你可以简单地把default-table-type=innodb行添加到my.cnf或my.ini文件的[mysqld]节里。

InnoDB对MyISAM存储引擎采用的单独索引创建方法没有做专门的优化。因此,它不值得导出或导入表以及随后创建索引。改变一个表为InnoDB型最快的办法就是直接插入进一个InnoDB表。即,使用ALTER TABLE ... ENGINE=INNODB,或用相同的定义创建一个空InnoDB表,并且用INSERT INTO ... SELECT * FROM ...插入行。

如果你对第二个键有UNIQUE约束,你可以在导入阶段设置:SET UNIQUE_CHECKS=0,以临时关掉唯一性检查好加速表的导入。对于大表,这节省了大量的磁盘I/O,因为InnoDB随后可以使用它的插入缓冲区来第二个索引记录作为一批来写入。

为获得对插入进程的更好控制,分段插入大表可能比较好:

INSERT INTO newtable SELECT * FROM oldtable
WHERE yourkey > something AND yourkey <= somethingelse;
所有记录已经本插入之后,你可以重命名表。

在大表的转换中,你应该增加InnoDB缓冲池的大小来减少磁盘I/O。尽管如此,不要使用超过80%的内部内存。你也可以增加InnoDB日志文件和日志文件的大小。

确信你没有填满表空间:InnoDB表比MyISAM表需要大得多的磁盘空间。如果一个ALTER TABLE耗尽了空间,它就开始一个回滚,并且如果它是磁盘绑定的,回滚可能要几个小时。对于插入,InnoDB使用插入缓冲区来以成批地合并第二个索引记录到索引中。那样节省了大量磁盘I/O。在回滚中,没有使用这样的机制,而回滚要花比插入长30倍的时间来完成。

在失控的回滚情况下,如果你在数据库中没有有价值的数据,比较明智的是杀掉数据库进程而不是等几百万个磁盘I/O被完成。 完整的过程,请参阅15.2.8.1节,“强制恢复”。
[/Quote]
fbling11 2011-11-17
  • 打赏
  • 举报
回复
http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html
在“3.1.1、InnoDB和MyISAM的数据布局的比较”中有提到。

手册中的原文
InnoDB does not have a special optimization for separate index creation the way the MyISAM storage engine does. Therefore, it does not pay to export and import the table and create indexes afterward. The fastest way to alter a table to InnoDB is to do the inserts directly to an InnoDB table. That is, use ALTER TABLE ... ENGINE=INNODB, or create an empty InnoDB table with identical definitions and insert the rows with INSERT INTO ... SELECT * FROM ....
If you have UNIQUE constraints on secondary keys, you can speed up a table import by turning off the uniqueness checks temporarily
during the import operation:
ACMAIN_CHM 2011-11-17
  • 打赏
  • 举报
回复
楼上的“二级索引”是指什么? 手册上的全文是什么?没见过这个术语啊。

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧