1)如果不使用索引,SQL查询执行时间O(n)是否与连接数相比较?如果没有,我们可能会期待什么样的关系?并且索引可以改善实际的大O时间复杂度,还是仅仅通过一些常数因子减少整个查询时间?
稍微含糊的问题,我确信它变化很大,但我在这里谈论的是一般意义.
2)如果您有如下查询:
SELECT T1.name, T2.date
FROM T1, T2
WHERE T1.id=T2.id
AND T1.color='red'
AND T2.type='CAR'
Run Code Online (Sandbox Code Playgroud)
我是否正确地假设DB在评估多表条件之前首先在T1.color和T2.type上进行单表过滤?在这种情况下,使查询更复杂可以使它更快,因为更少的行受到连接级别测试?
我有一对多的地图课程- MyMap1N<WeakPtr_Parent,WeakPtr_Children>。
通过设计,应该存储与游戏相关的实例的弱指针。
粗略地说,它被称为:-
MyMap1N<WeakPtr<Room>,WeakPtr<RigidBody>> map;
WeakPtr<Room> room=create<Room>();
WeakPtr<RigidBody> body=create<RigidBody>();
map.add(room,body);
MyArray<WeakPtr<RigidBody>> bodys=map.getAllChildren(room);
Run Code Online (Sandbox Code Playgroud)
通过分析,我发现它std::unordered_map太慢了。
因此,我不得不寻找另一种方法来实现它。
我决定在中创建一个数组(而不是unordered_map)Room。
为了提高查询速度,我还注入indexInArray来存储的每个实例RigidBody(请参见下图)。
有了它indexInArray,就可以进行操作add(room,body)和remove(room,body)获取O(1),并确保Room::bodys占用了每个插槽。
RigidBody删除子级()的某些实例时会出现问题。
MyMap1N甚至都不知道
MyMap1N当某些实例RigidBody被删除时,该如何清理?
注意:(可用工具/限制)
WeakPtr<>为nullptr”的成本非常便宜。 intID。(编辑:澄清)MyMap1N<Something,Something>在许多System-like课堂上都有很多分散的地方。
因此,像这样硬编码是非常难以维持的:
rigidBody->destroy() ===> {
SystemA::mapRoomBody::removeParent(rigidBody) ;
SystemA::mapCatBody::removeParent(rigidBody) ;
SystemB::mapBodyDog::removeAllChildren(rigidBody) ;
} //: Cat and Dog denotes …Run Code Online (Sandbox Code Playgroud)