将索引添加到批量列数

时间:2017-05-15 09:41:03

标签: mysql

我尝试在迁移中一次添加索引到16列:

add_index :billing_invoices, [:due_date, :flat_fee, :percentage_fee, :subtotal, 
:processing_fee, :total, :invoice_number, :attn, :street_line_1, :street_line_2,
:city, :state, :zip_code, :is_deactivated, :start_date, :end_date]

但是,我收到了这个错误:

  

Mysql2 ::错误:指定的密钥太长;最大密钥长度为3072   bytes:CREATE UNIQUE INDEX i ON billing_invoices(due_date,flat_fee,   percentage_fee,subtotal,processing_fee,total,invoice_number,   attn,street_line_1,street_line_2,city,state,zip_code,   is_deactivated,start_date,end_date)

所以,我尝试添加:unique => true, :name => 'indexes_billing_invoices',因为它在SO帖子中提出:

add_index :billing_invoices, [:due_date, :flat_fee, :percentage_fee, :subtotal, 
:processing_fee, :total, :invoice_number, :attn, :street_line_1, :street_line_2,
:city, :state, :zip_code, :is_deactivated, :start_date, :end_date],
:unique => true, :name => 'indexes_billing_invoices'

但是,它仍然会引发同样的错误。即使我尝试:name => 'i'来检查,但同样的错误也来了。

1 个答案:

答案 0 :(得分:0)

我发现问题是由两个原因引起的:

1>试图将所有列索引在一起。

2 - ;有些列的类型为varchar(255)

我的修复

列结构

+--------------------+---------------+
| Field              | Type          |
+--------------------+---------------+
| due_date           | datetime      |
| flat_fee           | decimal(10,2) |
| percentage_fee     | decimal(10,2) |
| subtotal           | decimal(10,2) |
| processing_fee     | decimal(10,2) |
| total              | decimal(10,2) |
| invoice_number     | varchar(255)  |
| attn               | varchar(255)  |
| street_line_1      | varchar(255)  |
| street_line_2      | varchar(255)  |
| city               | varchar(255)  |
| state              | varchar(255)  |
| zip_code           | varchar(255)  |
| is_deactivated     | tinyint(1)    |
| start_date         | datetime      |
| end_date           | datetime      |
+--------------------+---------------+

我分别为所有 varchar 列添加了索引,如下所示:

add_index :billing_invoices, [:due_date, :flat_fee, :percentage_fee, :subtotal,
  :processing_fee, :total, :is_deactivated, :start_date, :end_date
], unique => true, :name => 'indexes_date_decimal_columns'

add_index :billing_invoices, :invoice_number
add_index :billing_invoices, :attn
add_index :billing_invoices, :street_line_1
add_index :billing_invoices, :street_line_2
add_index :billing_invoices, :city
add_index :billing_invoices, :state
add_index :billing_invoices, :zip_code

它对我有用!!!

我采用了这个修补程序,因为我只想在rails中修复