Php 数据库索引大小相关问题
我在一个与发票相关的项目中工作,现在我面临一个DB索引大小的问题或与Php 数据库索引大小相关问题,php,database,indexing,size,Php,Database,Indexing,Size,我在一个与发票相关的项目中工作,现在我面临一个DB索引大小的问题或与索引相关的问题 索引: Keyname: invoice_number_company_unique Type: BTREE Unique: Yes Packed: No Column: invoice_number_prefix, invoice_number, company_id Cardinality: 256, 768, 768 Collation: A, A, A Null: Yes, Yes, No 表名:
索引相关的问题
索引:
Keyname: invoice_number_company_unique
Type: BTREE
Unique: Yes
Packed: No
Column: invoice_number_prefix, invoice_number, company_id
Cardinality: 256, 768, 768
Collation: A, A, A
Null: Yes, Yes, No
表名:发票
表结构:
CREATE TABLE IF NOT EXISTS `invoices` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`invoice_number_prefix` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`invoice_number` int(12) unsigned DEFAULT NULL,
`company_id` int(11) unsigned NOT NULL,
`amount` decimal(13,2) NOT NULL DEFAULT '0.00' COMMENT 'Invoice Total'
PRIMARY KEY (`id`),
UNIQUE KEY `invoice_number_company_unique`
(`invoice_number_prefix`,`invoice_number`,`company_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
数据一直插入到:invoice\u number\u company\u unique=invo settings-4294967295-6
尝试执行下一张发票时,其中发票\u编号\u公司\u唯一=发票设置-4294967296-6
:它开始显示数据库错误,如下所示:
“发票号\公司\唯一”关键字的重复条目“发票设置-4294967295-6”
我认为这与指数的大小有关。因为当我将invo settings-4294967295-6
更改为invo sett-4294967295-6
时,它成功地工作了。我已经在DB中直接尝试过了
带有:invo设置-4294967295-6
DB错误
使用:invo sett-4294967295-6
Success
有人知道这件事吗?请帮帮我好吗
UNIQUE KEY `invoice_number_company_unique`
(`invoice_number_prefix`,`invoice_number`,`company_id`)
您的索引,由于连接可能太大,是否会使引擎认为两个不同的条目是重复的?您可以尝试限制发票\u编号\u前缀中的字符标记,并查看其是否有效:
删除invoice\u number\u company\u unique
索引并再次创建它,将前缀限制为10个字符,如下所示:
CREATE INDEX invoice_number_company_unique ON invoices
(invoice_number_prefix(10),invoice_number,company_id)
我想我已经找到了我所面临的问题的原因和答案&在这里我要和大家分享
无论指定什么长度,INT
始终为4字节
TINYINT = 1 byte (8 bit)
SMALLINT = 2 bytes (16 bit)
MEDIUMINT = 3 bytes (24 bit)
INT = 4 bytes (32 bit)
BIGINT = 8 bytes (64 bit).
长度仅指定使用mysql命令行客户端选择数据时要显示的字符数
最大值将为2147483647(有符号)
或4294967295(无符号)
您可以看到最大范围为4294967295
,如果您查看我的错误,很明显我的发票号达到了invoice
表中的最大限制,其中字段类型为int(11)
我已通过将类型更改为bigint
进行了检查&问题已得到解决
将int
更改为bigint
在我的项目中是不可接受的&因此我必须将发票号重置为更小的数字&这修复了DB的错误
好的。。我会在几个小时内检查,并让您知道我有一个更改前缀标签的自定义选项,因此我已将标签更改为inv
。在这种情况下,错误显示也是一样的。谢谢你的帮助和建议。很高兴你做到了,这很有意义