【发布时间】:2014-09-09 19:05:08
【问题描述】:
我正在使用 Rails 3.2.18 和 MRI-Ruby-2.0.0
宝石文件:
gem 'tiny_tds'
gem 'activerecord-sqlserver-adapter'
$ 宝石列表 | grep -E "tds|sql"
activerecord-sqlserver-adapter (3.2.12)
sqlite3 (1.3.9)
tiny_tds (0.6.2)
数据库.yml:
development:
adapter: sqlserver
database: DBTEST
username: domain\username
password: somepwd
host: myhostname
port: 1433
timeout: 180000
问题:查询需要很长时间才能完成。见:
> MyModel.find_all_by_NRPIS '12700333166'
MyModel Load (85869.3ms) EXEC sp_executesql N'SELECT [MyTable].* FROM [MyTable] WHERE [MyTable].[NRPIS] = N''12700333166'''
所以我看到问题出在N unicode 转换中,因为当我在没有它的情况下查询时,它真的很快,请参阅:
>> ActiveRecord::Base.connection.select_all "SELECT [MyTable].* FROM [MyTable] WHERE [MyTable].[NRPIS] = '12700333166'" }
(62.5ms) EXEC sp_executesql N'SELECT [MyTable].* FROM [MyTable] WHERE [TBCAGEDTrabalhador].[NRPIS] = ''12700333166'''
>> ActiveRecord::Base.connection.select_all "SELECT [MyTable].* FROM [MyTable] WHERE [MyTable].[NRPIS] = N'12700333166'" }
(102324.0ms) EXEC sp_executesql N'SELECT [MyTable].* FROM [MyTable] WHERE [MyTable].[NRPIS] = N''12700333166'''
这里发生了什么,我该如何解决这个问题?
我见过THIS QUESTION,但我真的很想告诉 sqlserver-adapter 不要将任何东西转换为 unicode。
【问题讨论】:
标签: ruby-on-rails sql-server performance activerecord unicode