私は DBIx::Class を使用しており、次の目的で sqlt_deploy_hook を使用しています。
sub {
my ($self, $sqlt_table) = @_;
$sqlt_table->add_index(name => 'indexes', fields => [keys %for_indexing]);
}
インデックスを作成したい列の一部はテキスト型であるか、長さが 255 を超える varchars です。次のように長さを指定しない限り、MySQL はテキスト インデックスを好みません。
index (long_field(996))
しかし、SQL::Translator::Schema::Table (add_index メソッドがある) と Index を見ると、長さを指定する方法がわかりません。
add_index(name => 'indexes', fields => ['long_field'])
次の SQL を生成します。
INDEX `indexes` (`long_field`)
この:
add_index(name => 'indexes', fields => ['long_field(996)'])
次の SQL を生成します。
INDEX `indexes` (`long_field(996)`)
その名前の列がないため、これは機能しません。
これまでは、テキスト列にインデックスを付けないことでこれを回避してきました。ただし、「インストール」時に長い varchar をテキスト列に変換する DBIx::Class::DeploymentHandler を使用しようとしていますが、それらの varchar 列にインデックスを付ける必要があります。
私に何ができる?