我有一张桌子,我们称之为"foos",其中有近600万条记录.我正在运行以下查询:
SELECT "foos".*
FROM "foos"
INNER JOIN "bars" ON "foos".bar_id = "bars".id
WHERE (("bars".baz_id = 13266))
ORDER BY "foos"."id" DESC
LIMIT 5 OFFSET 0;
Run Code Online (Sandbox Code Playgroud)
此查询需要很长时间才能运行(Rails在运行时会超时).所有ID都有一个索引.好奇的部分是,如果我删除ORDER BY条款或LIMIT条款,它几乎是瞬间运行.
我假定这两者的存在ORDER BY和LIMIT正在做的PostgreSQL查询规划一些错误的选择.任何人都有任何想法如何解决这个问题?
如果它有帮助,这里是EXPLAIN所有3种情况:
//////// Both ORDER and LIMIT
SELECT "foos".*
FROM "foos"
INNER JOIN "bars" ON "foos".bar_id = "bars".id
WHERE (("bars".baz_id = 13266))
ORDER BY "foos"."id" DESC
LIMIT 5 OFFSET 0;
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------
Limit (cost=0.00..16663.44 rows=5 width=663)
-> Nested Loop (cost=0.00..25355084.05 rows=7608 width=663) …Run Code Online (Sandbox Code Playgroud) 我们的一个视图有一个ScrollView根布局.当设备旋转并被onConfigurationChanged()调用时,我们希望能够获得ScrollView新的宽度/高度.我们的代码如下所示:
@Override
public void onConfigurationChanged(Configuration newConfig) {
Log.d(TAG, "Width: '" + findViewById(R.id.scrollview).getWidth() + "'");
Log.d(TAG, "Height: '" + findViewById(R.id.scrollview).getHeight() + "'");
super.onConfigurationChanged(newConfig);
Log.d(TAG, "Width: '" + findViewById(R.id.scrollview).getWidth() + "'");
Log.d(TAG, "Height: '" + findViewById(R.id.scrollview).getHeight() + "'");
}
Run Code Online (Sandbox Code Playgroud)
我们的AndroidManifest.xml的相关部分如下所示:
<activity android:name=".SomeActivity"
android:configChanges="keyboardHidden|orientation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
最后,我们布局的相关部分如下所示:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollview"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
>
<LinearLayout android:id="@+id/container"
android:orientation="vertical"
android:layout_height="fill_parent"
android:minHeight="200dip"
android:layout_width="fill_parent"
>
Run Code Online (Sandbox Code Playgroud)
在我们的Droid上,我们期望ScrollView的宽度在切换到横向时变为854,在切换回纵向时变为480(并且高度与等效开关相同,减去菜单栏).但是,我们正好相反.这是我们的LogCat:
// Switching to landscape:
03-26 11:26:16.490: DEBUG/ourtag(17245): Width: '480' // Before super …Run Code Online (Sandbox Code Playgroud) 我最近一直在研究我的基本数据结构,试图确保我已经冷却了它们.
"基本",我指的是真正基本的.像红黑树和布鲁姆过滤器这样的花哨的东西显然值得了解,但它们通常要么是基本的增强(红黑树是具有特殊属性的二元搜索树以保持平衡)或者它们仅在非常有用具体情况(布隆过滤器).
到目前为止,我在以下数据结构中"流畅":
但是,我觉得我错过了一些东西.我有什么基本的遗忘吗?
编辑:发布问题后添加这些
我有以下型号的应用:User,Task,和Assignment.每个分配belongs_to用户和任务(或换句话说,任务通过分配分配给用户).
用户完成任务后,分配将标记为完成,应用程序会立即创建新的分配(或者换句话说,将任务分配给其他人).
创建此新作业后,我想立即向新受让人发送电子邮件.我知道我可以通过以下三种方式之一做到这一点:
after_create.人们认为哪种选择最好,为什么?#1对我来说似乎很糟糕,因为我不想记得在每个可能完成作业的动作中发送它.我听说有几个人说Rails观察员很糟糕,应该避免,但我不确定他们是不是我应该信任的人.还有其他意见吗?
我有以下三个模型:用户,项目和分配.
用户has_many通过作业进行投射.但是,Assignment实际上有两个与User相关的外键:( user_id表示分配了项目completer_id的用户)和(表示完成项目的用户).
通常,user_id并且completer_id将是相同的(如果分配项目的用户完成它).但是,如果另一个用户完成它,user_id和completer_id将是不同的.
在我的用户模型中,我有以下内容:
class User < ActiveRecord::Base
has_many :assignments
has_many :incomplete_assignments, :class_name => 'Assignment',
:conditions => 'completer_id IS NULL'
has_many :completed_assignments, :class_name => 'Assignment',
:foreign_key => 'completer_id'
# this is the important one
has_many :incomplete_projects,
:through => :assignments,
:source => :project,
:conditions => 'completer_id IS NULL'
end
Run Code Online (Sandbox Code Playgroud)
我想创建一个名为的另一个关联,:completed_projects它completer_id在:through模型中用作User的外键,而不是:user_id.是否有可能做到这一点?
而且,顺便说一句,我知道这个:foreign_key选项.但是,使用时会忽略此选项:through,因此我想知道是否有办法在没有它的情况下执行此操作.
最后,我应该提到我对其他设计持开放态度,如果不能这样做,有人可以想出更好的方法.
我有一个TabActivity带有四个选项卡(每个选项卡都有自己的活动).每个选项卡都定义了自己的onCreateOptionsMenu(在某些情况下onPrepareOptionsMenu).加载每个选项卡时,将AsyncTask启动a以检索填充该选项卡列表所需的数据.
如果我非常快速地切换选项卡(当它们仍在加载时),然后按菜单按钮(当前选项卡AsyncApiTask仍在运行时),我将能够显示错误的选项菜单.
例如,假设FooActivity(标签1)有一个带有"刷新"项目的选项菜单,BarActivity(标签2)有一个带有"查看全部"项目的选项菜单.如果我启动应用程序(标签1处于活动状态),快速切换到标签2,然后点击菜单,有时会显示"刷新"项目(而不是预期的"查看全部"项目).
此外,虽然这种奇怪的行为有时会出现在第一个菜单按下(后来按下显示正确的项目),有时它会"卡住",并且每次按下时都会显示错误的项目,直到我切换标签.
知道会发生什么吗?我以前没有听说过这种情况,也未能找到任何好的建议.
android tabwidget options-menu android-tabhost android-asynctask
我正在关注Mac上的Learning Objective-C中最早的一个例子.我的代码几乎与书中的代码完全相同(一些空格和平凡的括号可能不同).它看起来像这样:
#import <Foundation/Foundation.h>
BOOL areIntsDifferent (int thing1, int thing2) {
if (thing1 == thing2) {
return NO;
}
else {
return YES;
}
}
NSString * boolString (BOOL yesNo) {
if (yesNo == NO) {
return (@"NO");
}
else {
return (@"YES");
}
}
int main (int argc, const char * argv[]) {
BOOL areTheyDifferent;
areTheyDifferent = areIntsDifferent(5, 5);
NSLog(@"are %d and %d different? %@", 5, 5, boolString(areTheyDifferent));
areTheyDifferent = areIntsDifferent(23, 42);
NSLog(@"are %d and $d different? …Run Code Online (Sandbox Code Playgroud) android ×2
model ×2
associations ×1
callback ×1
email ×1
limit ×1
objective-c ×1
options-menu ×1
orientation ×1
postgresql ×1
scrollview ×1
sql ×1
sql-order-by ×1
tabwidget ×1
xcode ×1