我有10个表,除了表名以外具有相同的结构.
我有一个sp(存储过程)定义如下:
select * from table1 where (@param1 IS NULL OR col1=@param1)
UNION ALL
select * from table2 where (@param1 IS NULL OR col1=@param1)
UNION ALL
...
...
UNION ALL
select * from table10 where (@param1 IS NULL OR col1=@param1)
Run Code Online (Sandbox Code Playgroud)
我用以下行调用sp:
call mySP('test') //it executes in 6,836s
Run Code Online (Sandbox Code Playgroud)
然后我打开了一个新的标准查询窗口.我刚刚复制了上面的查询.然后用'test'替换@ param1.
这在0,321秒内执行,比存储过程快20倍.
我重复更改了参数值,以防止缓存结果.但这并没有改变结果.SP比同等标准查询慢大约20倍.
请你帮我弄清楚为什么会这样?
有没有人遇到类似的问题?
我在Windows Server 2008 R2 64位上使用mySQL 5.0.51.
编辑:我正在使用Navicat进行测试.
任何想法对我都有帮助.
EDIT1:
我根据Barmar的回答做了一些测试.
最后,我改变了下面的sp,只有一行:
SELECT * FROM table1 WHERE col1=@param1 AND col2=@param2
Run Code Online (Sandbox Code Playgroud)
然后我首先执行标准查询
SELECT * FROM table1 WHERE col1='test' AND …Run Code Online (Sandbox Code Playgroud) 下面的代码是我的纬度字符串.我不希望它变得圆润.double lat必须是41.04546.
NSString *latitude= @"41.04546";
double lat= latitude.doubleValue; //it gives 41.0455
CLLocationCoordinate2D coordinat;
coordinat.latitude= lat;
Run Code Online (Sandbox Code Playgroud)
对于不能舍入的精确坐标.