gpt4 book ai didi

mysql - my.cnf 中的不同设置导致 "max key length is 1000 bytes"错误

转载 作者:行者123 更新时间:2023-11-29 03:15:02 24 4
gpt4 key购买 nike

编辑:这可能是 5.0 特有的错误。 (我在 5.0.83 上)。删除 innodb_log_file_size 设置可以解决这个问题。这是完全有道理的。不是。

谷歌搜索发现 5.0 中存在一些类似但不完全相同的问题,这些问题后来得到了修补。

由于 my.cnf 中的“错误”设置,MySQL 5.0 上的这个创建语句将给我“指定的 key 太长;最大 key 长度为 1000 字节”。

CREATE TABLE ReproduceTheProblem (
COLUMN_ONE varchar(200) character set utf8 default NULL,
COLUMN_TWO varchar(200) character set utf8 default NULL,
KEY ThisKeyBreaks(COLUMN_ONE, COLUMN_TWO)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

在尝试提高性能时,我找到了性能良好但出现“ key 太长”错误的 my.cnf 设置。我确实有可以创建此键的 my.cnf 设置,但在将数据导入到另一个非常大的表中时表现非常糟糕。

有效但性能不佳的设置(并且由于我尝试拨入不同的设置而产生了一些古怪的值):

[client]
port = 3306
socket = /tmp/mysql.sock

[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
key_buffer_size = 384M
max_allowed_packet = 1024M
table_cache = 256
max_sp_recursion_depth=255
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
myisam_max_sort_file_size = 30G
thread_cache_size = 8
query_cache_size= 16M
thread_concurrency = 8
max_heap_table_size = 9900000
skip-federated
log-bin=mysql-bin
server-id = 1

[mysqldump]
quick
max_allowed_packet = 256M

[mysql]
no-auto-rehash

[isamchk]
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M
[myisamchk]
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

执行良好但给我 key 长度错误的设置:

[client]
port = 3306
socket = /tmp/mysql.sock

[mysqld]
port = 3306
socket = /tmp/mysql.sock
max_allowed_packet = 200M
table_cache = 256
query_cache_type = 1
query_cache_limit = 20M
query_cache_size = 500M
long_query_time = 2
thread_cache_size = 1000
thread_concurrency = 4
innodb_thread_concurrency = 4
old_passwords = 1
max_connections = 1000
max_sp_recursion_depth = 255
server-id = 0
innodb_buffer_pool_size = 800M
innodb_additional_mem_pool_size = 50M
innodb_log_file_size=50M
innodb_log_buffer_size = 200M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout =50

[mysqldump]
quick
max_allowed_packet = 200M

[mysql]
no-auto-rehash

最佳答案

我认为你的 my.cnf 与此没有太大关系,必须有其他一些变量。

来自Restrictions on InnoDB Tables :

The internal maximum key length is 3500 bytes, but MySQL itself restricts this to 3072 bytes. (1024 bytes for non-64-bit builds before MySQL 5.0.17, and for all builds before 5.0.15.)

我还注意到 bug 4541表示 1000 字节的限制,并且没有计划简单地增加它。

在性能方面,像这样的大索引(和表)会非常慢。我建议只索引 varchars 的前缀而不是整个字符串。

关于mysql - my.cnf 中的不同设置导致 "max key length is 1000 bytes"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1731149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com