我一直在尝试在包含100K行的varchar(20)列上创建索引,到目前为止它已经运行了30分钟。在具有16GB内存和SSD驱动器的8核i7处理器上,我只是不明白它花了这么长时间。
有什么想法吗?我对MySQL有点新鲜,但这只是一个相对较小的表上的基本vanilla索引。同一个表上的另一个索引只需几秒钟即可生成。
如何在MySQL中调试此类事情?
答案 0 :(得分:0)
桌子内存的总大小是多少?如果它足够大,你得到了很多硬盘驱动器,它可能还需要一段时间。另外,在你这样做的时候,你的网站是否有效?
就调试而言,您可以检查系统上的SQL进程以查看它正在使用的资源数量。
最后,你看过创建一个多列索引而不是两个单列索引吗?
答案 1 :(得分:0)
事实证明,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