在工作中,我们对具有以下结构的表进行了查询:
ip_from(number), ip_to(number), country, city, state, isp, latitude, longitude.
Run Code Online (Sandbox Code Playgroud)
该表有大约610万行.
要查找给定IP地址的详细信息,我们使用了如下查询:
SELECT *
FROM Ip2location
WHERE
:ip_num BETWEEN ip_from AND ip_to;
Run Code Online (Sandbox Code Playgroud)
在我们的开发数据库中的Oracle 10上,这需要大约17秒才能返回一行,具体取决于ip_num传入的内容.在我们更强大的实时系统上,它可能需要5-6秒,这实际上仍然太慢,我们需要通过后台作业选择此项.
不理想,特别是因为我们的实时系统真的需要ip细节.
索引的使用的类型是标准BTREE索引跨越两个ip_from和ip_to.我们研究了很多东西来尝试加快速度,例如范围分区.我们最终没有应用它,因为它需要Oracle Enterprise.我们还研究了增加表的并发性,但没有明显的效果.
无论如何,当我早上喝咖啡时,我意识到我认为可以通过运行以下查询来提高性能:(这是来自内存,可能会有一些错误.我们也选择了单个字段而不是所有内容)
SELECT *
FROM ip2location
WHERE
ip_from = (
SELECT max(ip_from)
FROM ip2location
WHERE ip_from <= :ip_num
)
AND
ip_to >= ip_num;
Run Code Online (Sandbox Code Playgroud)
这适用于我们的数据集,因为ip_from和之间没有重叠的范围ip_to.
然而,我没有准备好的是第二个查询的速度有多快.我们的开发数据库上的时间从17秒减少到0.007秒.
这对我来说没什么意义.我希望有一些性能提升,但不是那么多.数据库统计数据是否应该已经确定没有重叠并相应地进行优化?还有一种公认的更快捷方式来选择使用范围?
我的问题是:为什么即使使用子选择,第二个查询也要快得多?
我正在尝试使用jQuery并jQuery UI拖动<ul>水平位于内部的元素<div>.
我想得到位于<li>元素内部的按钮的坐标以使它们居中#the_parent,但每次调整浏览器窗口时我得到的位置都会改变,我如何获得相对于的位置#the_parent?
<script type:"text/javascript">
$(document).ready (function () {
$(".button").click (function () {
var offset = $(this).offset();
alert (offset.left);
});
});
</script>
<style type="text/css">
#dragme li { float:left; list-style:none; }
#the_parent { width:100%; }
.spacer { width:100px; }
.button div { padding:5px; background-color:darkgrey; color:white; }
</style>
<!-- this is contained inside another div of width:600px and it's centered in the middle of the page -->
<div …Run Code Online (Sandbox Code Playgroud) 如果不满足某些条件,我试图跳到循环的下一次迭代.问题是循环无论如何都在继续.
我哪里出错了?
更新了代码示例以响应第一条评论.
foreach ($this->routes as $route => $path) {
$continue = 0;
...
// Continue if route and segment count do not match.
if (count($route_segments) != $count) {
$continue = 12;
continue;
}
// Continue if no segment match is found.
for($i=0; $i < $count; $i++) {
if ($route_segments[$i] != $segments[$i] && ! preg_match('/^\x24[0-9]+$/', $route_segments[$i])) {
$continue = 34;
continue;
}
}
echo $continue; die(); // Prints out 34
Run Code Online (Sandbox Code Playgroud) 我需要使用创建一个应用程序NSUserDefaults.
在我的第一个视图中,我将输入密码.在第二个视图中,我将输入确认密码.然后验证将发生; 之后如果密码在两个视图中都匹配,则会打开成功窗口.之后会有一些意见.我需要保存密码NSUserDefaults以备将来使用.
如果我将在验证后关闭我的应用程序,那么如果我将构建并再次运行我的应用程序,则密码验证窗口不应该打开.
只有一个视图会询问密码,如果当前密码等于终止应用程序密码之前,则应用程序的成功视图将打开.现在,验证应该与当前密码NSUserDefaults的值相比较[即旧密码,在终止我的应用程序之前存储].
有可能使用NSUserDefaults?
我的课程是多态的,不应该被用来做任何事情.它有一个Font&类型的成员,因此编译器不能生成=运算符.所以我刚刚创建了赋值和复制构造函数的虚拟实现,将它们放在类的私有中,但它仍然警告我,无法生成赋值运算符.我怎么能摆脱这个警告?
谢谢
警告9警告C4512:'AguiWidget':无法生成赋值运算符c:\ users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\aguiwidget.hpp 250
在C#3.0中,您可以为int分配null吗?type(在CLR int?中是一个struct):
int? a = null;
Run Code Online (Sandbox Code Playgroud)
但是当你定义一个自定义结构时:
struct MyStruct
{
}
Run Code Online (Sandbox Code Playgroud)
编译此代码时出错:
MyStruct a = null;
Run Code Online (Sandbox Code Playgroud)
错误如下:
Cannot convert null to 'Example.MyStruct' because it is a non-nullable value type
Run Code Online (Sandbox Code Playgroud)
int?是CLR中的结构,它在某种程度上违反直觉,我们可以为它分配null.我想null被隐式地转换或装箱到certian int?表示空值的值.它是如何完成的?如何以可以执行该行的方式扩展MyStruct:
MyStruct a = null;
Run Code Online (Sandbox Code Playgroud)