相关疑难解决方法(0)

SQL查询复杂性对性能有什么一般规律吗?

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上进行单表过滤?在这种情况下,使查询更复杂可以使它更快,因为更少的行受到连接级别测试?

sql performance big-o

34
推荐指数
2
解决办法
2万
查看次数

在使用自定义弱指针的一对多关系中清理nullptr

我有一对多的地图课程- 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_mapRoom
为了提高查询速度,我还注入indexInArray来存储的每个实例RigidBody(请参见下图)。

有了它indexInArray,就可以进行操作add(room,body)remove(room,body)获取O(1),并确保Room::bodys占用了每个插槽。

在此处输入图片说明

RigidBody删除子级()的某些实例时会出现问题。
MyMap1N甚至都不知道

在此处输入图片说明

MyMap1N当某些实例RigidBody被删除时,该如何清理?

注意:(可用工具/限制)

  • 对我而言,幸运的是,检查“是否WeakPtr<>nullptr”的成本非常便宜。
  • 每个实例都有自己的唯一intID。
    ID针对每种类型运行,并且ID的值较低(因为我对其进行了回收)。
  • 我使用多线程。
  • (编辑:澄清)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)

c++ arrays handle one-to-many c++17

7
推荐指数
1
解决办法
181
查看次数

标签 统计

arrays ×1

big-o ×1

c++ ×1

c++17 ×1

handle ×1

one-to-many ×1

performance ×1

sql ×1