大家好:
今天在维护项目的时候出现了一个严重问题。
我们的数据库是sqlserver2008,开发是用的.Net+ibatis.库中有个表 主键字段类型是varchar, 在程序中有个查询语句根据主键查,主键叫userId,在ibatis配置文件中拼凑的查询条件是 where userId = #userid# ,结果导致查询时连接超时,后来找到公司的dba监控了一下,他说程序里做个转换改成 where userId = #userid:varchar# 这样就可以了,我们修改后还就真的没问题了。
我想问下,这到底是为什么呢?是不是程序里传进来的参数是String类型 默认成了数据库中nvarchar 类型,但是在执行sql的时候 数据库要做个类型转换,将nvarchar转换为varchar 结果在做转换的时候导致连接超时????
sqlserver内部是怎么实现类型转换的? 这对效率有多大的影响? 还是说是其他原因????
求解~~~~~
今天在维护项目的时候出现了一个严重问题。
我们的数据库是sqlserver2008,开发是用的.Net+ibatis.库中有个表 主键字段类型是varchar, 在程序中有个查询语句根据主键查,主键叫userId,在ibatis配置文件中拼凑的查询条件是 where userId = #userid# ,结果导致查询时连接超时,后来找到公司的dba监控了一下,他说程序里做个转换改成 where userId = #userid:varchar# 这样就可以了,我们修改后还就真的没问题了。
我想问下,这到底是为什么呢?是不是程序里传进来的参数是String类型 默认成了数据库中nvarchar 类型,但是在执行sql的时候 数据库要做个类型转换,将nvarchar转换为varchar 结果在做转换的时候导致连接超时????
sqlserver内部是怎么实现类型转换的? 这对效率有多大的影响? 还是说是其他原因????
求解~~~~~
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货