小编jak*_*xer的帖子

使用ORDER和LIMIT子句进行极慢的PostgreSQL查询

我有一张桌子,我们称之为"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 BYLIMIT正在做的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)

sql postgresql sql-order-by query-optimization limit

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

如何在onConfigurationChanged中获取根布局的新宽度/高度?

我们的一个视图有一个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)

android scrollview orientation onconfigurationchanged

20
推荐指数
3
解决办法
1万
查看次数

基本数据结构清单 - 我缺少什么?

我最近一直在研究我的基本数据结构,试图确保我已经冷却了它们.

"基本",我指的是真正基本的.像红黑树和布鲁姆过滤器这样的花哨的东西显然值得了解,但它们通常要么是基本的增强(红黑树是具有特殊属性的二元搜索树以保持平衡)或者它们仅在非常有用具体情况(布隆过滤器).

到目前为止,我在以下数据结构中"流畅":

  • 数组
  • 链接列表
  • 栈/队列
  • 二叉搜索树
  • 堆/优先级队列
  • 哈希表

但是,我觉得我错过了一些东西.我有什么基本的遗忘吗?

编辑:发布问题后添加这些

  • 字符串(由catchmeifyoutry建议)
  • 套(彼得建议)
  • 图(由Nick D和aJ建议)
  • B树(由tloach建议)
    • 关于这些是否过于花哨,我有点不确定,但我认为它们与基本结构(并且非常重要)有足够的不同,值得研究作为基础.

computer-science data-structures

10
推荐指数
3
解决办法
8991
查看次数

在Rails中创建新模型实例时发送电子邮件的最佳方式?

我有以下型号的应用:User,Task,和Assignment.每个分配belongs_to用户和任务(或换句话说,任务通过分配分配给用户).

用户完成任务后,分配将标记为完成,应用程序会立即创建新的分配(或者换句话说,将任务分配给其他人).

创建此新作业后,我想立即向新受让人发送电子邮件.我知道我可以通过以下三种方式之一做到这一点:

  1. 在我的控制器中明确发送电子邮件.
  2. 在Assignment模型的回调中发送电子邮件.
  3. 在Assignment模型上创建一个观察者并发送电子邮件after_create.

人们认为哪种选择最好,为什么?#1对我来说似乎很糟糕,因为我不想记得在每个可能完成作业的动作中发送它.我听说有几个人说Rails观察员很糟糕,应该避免,但我不确定他们是不是我应该信任的人.还有其他意见吗?

email model ruby-on-rails callback observer-pattern

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

在has_many:through关系中指定外键

我有以下三个模型:用户,项目和分配.

用户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_projectscompleter_id:through模型中用作User的外键,而不是:user_id.是否有可能做到这一点?

而且,顺便说一句,我知道这个:foreign_key选项.但是,使用时会忽略此选项:through,因此我想知道是否有办法在没有它的情况下执行此操作.

最后,我应该提到我对其他设计持开放态度,如果不能这样做,有人可以想出更好的方法.

model ruby-on-rails associations has-many-through

6
推荐指数
1
解决办法
9664
查看次数

Android TabActivity中的奇怪选项菜单行为

我有一个TabActivity带有四个选项卡(每个选项卡都有自己的活动).每个选项卡都定义了自己的onCreateOptionsMenu(在某些情况下onPrepareOptionsMenu).加载每个选项卡时,将AsyncTask启动a以检索填充该选项卡列表所需的数据.

如果我非常快速地切换选项卡(当它们仍在加载时),然后按菜单按钮(当前选项卡AsyncApiTask仍在运行时),我将能够显示错误的选项菜单.

例如,假设FooActivity(标签1)有一个带有"刷新"项目的选项菜单,BarActivity(标签2)有一个带有"查看全部"项目的选项菜单.如果我启动应用程序(标签1处于活动状态),快速切换到标签2,然后点击菜单,有时会显示"刷新"项目(而不是预期的"查看全部"项目).

此外,虽然这种奇怪的行为有时会出现在第一个菜单按下(后来按下显示正确的项目),有时它会"卡住",并且每次按下时都会显示错误的项目,直到我切换标签.

知道会发生什么吗?我以前没有听说过这种情况,也未能找到任何好的建议.

android tabwidget options-menu android-tabhost android-asynctask

5
推荐指数
1
解决办法
1260
查看次数

非常简单的Objective-C程序(Snow Leopard)上的EXC_BAD_ACCESS

我正在关注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)

xcode exc-bad-access objective-c osx-snow-leopard

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