我曾经这样做过:
SELECT layerID
FROM layers
WHERE ownerID = ?
AND collectionID = ?
Run Code Online (Sandbox Code Playgroud)
哪个会给我一个layerID的数组,然后我循环并为每个执行此操作:
SELECT DATA
FROM drawings
WHERE layerID = ?
Run Code Online (Sandbox Code Playgroud)
这一切都很好.所以现在我试图一步到位,所以我试试这个:
SELECT DATA , layerID
FROM drawings
WHERE layerID = ANY (
SELECT layerID
FROM layers
WHERE ownerID = ?
AND collectionID = ?
)
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,它不使用索引,对于主查询,SELECT DATA etc!因此,这个组合查询需要花费更长的时间来完成,而不是之前我做过的单独查询.(顺便说一句,子查询SELECT layerID etc仍然使用索引).
我已经通过使用'EXPLAIN'语句确定它是否正在使用查询.
我对个别指标ownerID和collectionID在列layers表中,并在layerID列drawings表.
我的查询错误是什么?
我需要有关MySQL中子选择性能的建议.由于我无法更改的原因,我无法使用JOIN创建问题过滤器,我只能在WHERE中添加另一个AND子句.
什么是以下表现:
select tasks.*
from tasks
where
some criteria
and task.project_id not in (select id from project where project.is_template = 1);
Run Code Online (Sandbox Code Playgroud)
相比:
select tasks.*
from tasks, project
where
some criteria
and task.project_id = project.id and project.is_template <> 1;
Run Code Online (Sandbox Code Playgroud)
请注意,is_template = 1的项目数量相对较少,并且可能存在大量项目,其中is_template <> 1.
如果我不能改变除过滤器之外的任何东西,还有其他方法可以在没有子选择的情况下实现相同的结果吗?
我正在尝试编写一个能够确定字符串是包含实数值还是整数值的函数.
这是我能想到的最简单的解决方案:
int containsStringAnInt(char* strg){
for (int i =0; i < strlen(strg); i++) {if (strg[i]=='.') return 0;}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
但是当字符串很长时,这个解决方案真的很慢...任何优化建议?真的很感激任何帮助!
在开发的最后阶段,我开始查看代码,试图找到一些不好的做法.我发现在访问页面时,我正在查询数据库n次(n是HTML表的行数)只是为了获得给定记录的翻译(不同的语言)...我立刻认为这很糟糕我尝试了一个小优化.
运行SQL事件探查器显示这些查询占用0毫秒.
由于我查询的这些表很小(20-100条记录),我以为我可以获取所有数据并将它们缓存到Web服务器RAM中,稍后使用LINQ to Objects进行检索.这种方式的执行时间也是0ms.
我正在运行这些测试的环境是同一台机器上负载为0%的DB和Web服务器.这只是我使用的应用程序.
问题从这里开始.既然我没有任何性能差异,我应该避免这种优化吗?我是否应该保持平衡DB和Web服务器的使用(服务器将在生产环境中的两台不同的机器上)?
在我看来,这种优化不会损坏性能,只有在重负载DB的情况下才能做得更好.我的大脑中有一些东西说如果没有必要进行优化是错误的......
感谢您的意见.
我正在开发一个网站,我已经工作了一年多.今天,我距离发布还有一周的时间,所以我开始讨论过去一年没有过去的事情 - 包括加载时间.我没有注意到任何装载问题,但我仍然想看.
以下代表我的索引页面:
Documents (1 file) 22 KB
Images (53 files) 96 KB
Objects (0 files)
Scripts (9 files) 90 KB - Including jQuery.min.js
Style Sheets (6 files) 23 KB
-------------------------------
Total 230 KB
我们不再生活在56k和28.8的世界中,但我想知道今天应该考虑什么太大.我还应该提一下,Analytics报告有3.28%的访问者有拨号.这些用户当前浏览的索引页面大小为158kb.
其他有趣的索引页面大小:
注意:由于过去的经验和Profiler软件的建议,我正在优化.我意识到另一种优化方法是GetNeighbors不经常调用,但这是目前的次要问题.
我有一个非常简单的功能如下所述.一般来说,我在foreach循环中调用它.我称这个功能很多(大约每秒100,000次).前段时间,我用Java编写了这个程序的一个变种,并且对我最终用4 if语句替换了几个for循环的速度感到反感.循环展开看起来很难看,但确实在应用程序速度上有明显的差异.所以,我想出了一些潜在的优化,并认为我会就他们的优点和建议征求意见:
使用代码生成实用程序将对GetNeighbors的调用转换为if语句作为编译的一部分.
public static IEnumerable<Square> GetNeighbors(Model m, Square s)
{
int x = s.X;
int y = s.Y;
if (x > 0) yield return m[x - 1, y];
if (y > 0) yield return m[x, y - 1];
if (x < m.Width - 1) yield return m[x + 1, y];
if (y < m.Height - 1) yield return m[x, y + 1];
yield break;
}
//The property of Model used to get elements. …Run Code Online (Sandbox Code Playgroud)我有一个带有GridView控件的简单aspx页面.单击按钮后,我正在使用搜索结果加载GridView.一切正常,但浏览器上的HTML渲染在IE中非常慢,结果设置> 2000(在其他浏览器中工作正常.)我发现由于记录计数它很慢,但有没有办法让它更快?(我不想使用分页.)
奇怪的是,只有当它在Windows 2003服务器上托管时才会很慢.它在我的localhost上工作正常,但无论是在测试站点还是生产中,都会出现问题.如果我远程桌面到我的测试服务器并在那里本地运行,页面加载正常.只有从本地计算机运行服务器托管应用程序时才会出现此问题.
我该如何解决这个问题?
在C#中,给出了两种方法
bool Action1(object Data);
bool Action2(object Data);
Run Code Online (Sandbox Code Playgroud)
在这样的if语句中使用:
if ( Action1(Data) || (Action2(Data) )
{
PerformOtherAction();
}
Run Code Online (Sandbox Code Playgroud)
会Action2()如果仍然被称为Action1()返回true,或者是这个由编译器优化阻止,因为它已经知道,表达式会true?
考虑以下两个函数:
void f(int n);
void f(int const n);
Run Code Online (Sandbox Code Playgroud)
从编译器优化的角度来看,后者似乎比前者更好。
然而,从调用者的角度来看,比 .int const n拥有更多的无用信息和更多的精神负担int n。
哪个是更好的做法?
c++ optimization performance constants compiler-optimization
这是我当前的代码:
// Yes, the missing single quotation mark is intentional
static void replace_punctuation(char *s, size_t len)
{
static const unsigned char punctuation[] = ".,;:!?\"()[]{}-";
for (size_t i = 0; i < len; ++i) {
if (memchr(punctuation, s[i], sizeof punctuation - 1)) {
s[i] = ' ';
}
}
}
Run Code Online (Sandbox Code Playgroud)
对程序进行分析(cachegrind/Kcachegrind)(在启用优化的情况下编译,-O2)后,发现这是一个瓶颈。
s不是以 null 结尾的字符串,因此strpbrk()不能使用。
如何对其进行优化?