在MySQL中为一个100K行表构建一个单列索引需要多长时间?

在MySQL中为一个100K行表构建一个单列索引需要多长时间?,mysql,ddl,Mysql,Ddl,我一直在尝试在一个有100K行的varchar(20)列上创建一个索引,到目前为止它已经运行了30分钟。在一个拥有16GB内存和SSD驱动器的8核i7处理器上,我真不明白是什么花了这么长时间 有什么想法吗?我对MySQL有点陌生,但这只是一个相对较小的表上的基本索引。同一个表上的另一个索引只需几秒钟即可生成 如何在MySQL中调试这种事情?表的内存中的总大小是多少?如果它足够大,你会接到很多硬盘的电话,这可能还需要一段时间。另外,在您进行此操作时,您的站点是否处于活动状态 在调试过程中,您可以检

我一直在尝试在一个有100K行的varchar(20)列上创建一个索引,到目前为止它已经运行了30分钟。在一个拥有16GB内存和SSD驱动器的8核i7处理器上,我真不明白是什么花了这么长时间

有什么想法吗?我对MySQL有点陌生,但这只是一个相对较小的表上的基本索引。同一个表上的另一个索引只需几秒钟即可生成


如何在MySQL中调试这种事情?

表的内存中的总大小是多少?如果它足够大,你会接到很多硬盘的电话,这可能还需要一段时间。另外,在您进行此操作时,您的站点是否处于活动状态

在调试过程中,您可以检查系统上的SQL进程,查看它使用了多少资源


最后,您是否考虑过创建一个多列索引而不是两个单列索引?

事实证明,默认的MySQL Ubuntu服务器LAMP安装的内存分配非常低,需要大量的磁盘交换,即使在内存明显过剩的机器上也是如此

请注意,我没有尝试查看哪些设置解决了这个问题,但是我在100K行上运行的命令(以前运行了几个小时)现在只需要几秒钟

[mysqld]
key_buffer_size         = 256M
max_allowed_packet      = 16M

# Added
innodb_buffer_pool_size = 2G
innodb_log_buffer_size  = 64M
innodb_log_file_size    = 64M
skip_name_resolve

query_cache_limit       = 16M
query_cache_size        = 64M

什么类型的索引“唯一”?数据的变量有多大?如果不是唯一的索引,并且很多值都相同,那么可能需要一段时间。实际上,如果索引不是很有选择性,那么它可能不值得拥有。要检查的其他事项:磁盘和可用空间的碎片程度。正常的非唯一索引,但很少重复。磁盘是新格式化的,因为这是一个新的LAMP安装在盒子上。互联网搜索:“mysql索引创建需要很长时间”返回一些有趣的链接。我这么做了,但这些人都在谈论数百万行。我的10万行表格应该在几分钟内完成。现在已经快一个小时了,数据长度是22609920。小的盒子正在运行一个新的灯具安装。机箱上的CPU为10%。