我有一个包含数百万条目的表"test".每行包含一个浮点"特征"和一个"计数"这个特征在项目"id"中出现的频率.该表的主键是"id"和"feature"的组合,即每个项目可能具有多个功能.每个商品ID通常有几百到几千个要素条目.
create table test
(
id int not null,
feature double not null,
count int not null
);
Run Code Online (Sandbox Code Playgroud)
任务是找到给定参考项目的500个最相似的项目.相似性以两个项目中相同特征值的数量来度量.我提出的查询在下面引用,但尽管正确使用索引,其执行计划仍包含"using temporary"和"using filesort",为我的用例提供了不可接受的性能.
select
t1.id,
t2.id,
sum( least( t1.count, t2.count )) as priority
from test as t1
inner join test as t2
on t2.feature = t1.feature
where t1.id = {some user supplied id value}
group by t1.id, t2.id
order by priority desc
limit 500;
Run Code Online (Sandbox Code Playgroud)
关于如何改进的任何想法?可以修改模式并根据需要添加索引.
我在后插入触发器中有一些可能会失败的代码.这样的失败不是关键,应该不会回滚事务.如何在触发器中捕获错误并使事务的其余部分正常执行?
下面的例子显示了我的意思.触发器故意创建一个错误条件,结果原始插入("1")从不插入表中.尝试/ Catch似乎没有做到这一点.一个类似的,较旧的堆栈溢出问题没有产生答案,除了"防止错误首先发生" - 这并不总是可能/容易.
还有其他想法吗?
create table test
(
a int not null
);
go
create trigger testTrigger on test
after insert as
begin
insert into test select null;
end;
go
insert into test values ( 1 );
Run Code Online (Sandbox Code Playgroud) 可以说我有许多包含非平凡长度的字符串(约3-4kb).字符串彼此不同但同时包含许多公共部分/子序列.平均而言,任何单个字符串的80-90%也包含在其他字符串中.是否有一种简单的方法可以自动利用这种巨大的冗余来压缩数据?
理想情况下,解决方案是C++并且对用户是透明的(即我可以使用它,就像我访问常规只读const std :: string而是从压缩存储中读取).
我正在维护一个大型闭源应用程序的插件(实现为dll).多年来一直运作良好.但是,随着SDK的最新更新,供应商重载全局运营商new和delete.这给我带来了很多麻烦.会发生什么是我的插件分配一个字符串.我将此字符串传递给静态链接库,该库修改它(更改它的长度,从而重新分配它).我的应用程序崩溃了.
原因当然是字符串存在于供应商分配的自定义堆上.静态链接库对此堆一无所知,并尝试在该内存上使用默认的new/delete运算符.繁荣.
现在的问题是:如何保持代码清洁并避免使用供应商的运营商?没有条件预处理器宏.我无法避免包含有问题的标题,因为它包含了2000行以上的插件所需的代码.我不能将提供的分配器传递到另一个库,因为它没有提供任何机制.我已经对供应商提出了相关问题.我不知道还能尝试什么?
附录:经过激烈的辩论后,我设法说服供应商再次从下一版本的SDK中删除重载.我通过简单地破解当前的SDK并手动删除重载来解决我的直接问题.感谢这个帖子中的所有建议.他们作为争论并进一步"证明"为什么重载首先是一个坏主意.
c++ memory-management allocation operator-overloading new-operator
我有一个平面,plane A由它的正交向量定义,比方说(a, b, c).
(即向量(a, b, c)是正交的plane A)
我希望将一个矢量(d, e, f)投影到plane A.
我怎么能在Python中做到这一点?我认为必须有一些简单的方法.
我正在使用collada装载机加载模型.加载器返回一个带有许多子网格的Object3D"dae".我想多次实例化父"dae"对象而不重复网格.我可以使用dae.clone()吗?
换句话说:我想制作浅色的副本,它们都有自己的变换矩阵,但共享相同的几何形状.最有效的方法是什么?
附加的,简单的测试程序测试清空一个简单的std :: map的性能.使用MSVC 2008和2010,从命令提示符执行调试构建将花费<30秒,但在调试器中执行时将花费大约3分钟.对clear()的调用完全是对差异的责任.如果我进入调试器,callstack将始终指向HeapFree.
问题:为什么巨大差异?我可以以某种方式更改调试堆设置,以便在调试器中执行时会很快吗?
#include <map>
int
main ( int, char )
{
std::map< time_t, double > test;
for ( int i = 0; i < 1000000; ++i )
{
test[i] = i / 3.14;
}
test.clear();
return 0;
}
Run Code Online (Sandbox Code Playgroud) c++ ×3
3d ×2
math ×2
algorithm ×1
allocation ×1
compression ×1
debugging ×1
geometry ×1
mysql ×1
new-operator ×1
optimization ×1
performance ×1
projection ×1
python ×1
sql ×1
sql-server ×1
stl ×1
string ×1
t-sql ×1
three.js ×1
triggers ×1