#!/usr/bin/perl use strict; use warnings; use DBI; use Time::HiRes qw/gettimeofday tv_interval/; use Text::Ngram::MySQL::FullText; our $DBH = connect_db( db => 'db', # この辺りを自分の環境用に書き換える user => 'user', # pass => 'pass' # ); our @QUERIES = (scalar @ARGV)? @ARGV : ( 'あい', 'あいう', 'あいかき', ); my $p = Text::Ngram::MySQL::FullText->new( column_name => 'ngram' ); foreach (@QUERIES){ my $t0 = [gettimeofday]; my $match = $p->to_match_sql( $_ ); my $res = $DBH->selectrow_hashref(qq{ SELECT count(*) as cnt FROM hoge WHERE $match }); print tv_interval( $t0 ) . " sec / $res->{cnt} 件 / $_\n"; } sub connect_db { my %arg = @_; my($d,$db,$h) = ('mysql', $arg{db}, 'localhost'); my $dsn = "DBI:$d:database=$db;host=$h"; my $dbh = DBI->connect( $dsn, $arg{user}, $arg{pass}, { AutoCommit => 0, RaiseError => 1, } ); $dbh->do("SET NAMES utf8"); return $dbh; }