在MySQL中为一个100K行表构建一个单列索引需要多长时间?
我一直在尝试在一个有100K行的varchar(20)列上创建一个索引,到目前为止它已经运行了30分钟。在一个拥有16GB内存和SSD驱动器的8核i7处理器上,我真不明白是什么花了这么长时间 有什么想法吗?我对MySQL有点陌生,但这只是一个相对较小的表上的基本索引。同一个表上的另一个索引只需几秒钟即可生成在MySQL中为一个100K行表构建一个单列索引需要多长时间?,mysql,ddl,Mysql,Ddl,我一直在尝试在一个有100K行的varchar(20)列上创建一个索引,到目前为止它已经运行了30分钟。在一个拥有16GB内存和SSD驱动器的8核i7处理器上,我真不明白是什么花了这么长时间 有什么想法吗?我对MySQL有点陌生,但这只是一个相对较小的表上的基本索引。同一个表上的另一个索引只需几秒钟即可生成 如何在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%。