我正在HSQLDB服务器上执行一些测试,其中包含一个包含500 000个条目的表.该表没有索引.有5000个不同的业务键.我需要一份清单.当然,我开始DISTINCT查询:
SELECT DISTINCT business_key FROM memory WHERE
concept <> 'case' or
attrib <> 'status' or
value <> 'closed'
Run Code Online (Sandbox Code Playgroud)
大约需要90秒!
然后我尝试使用GROUP BY:
SELECT business_key FROM memory WHERE
concept <> 'case' or
attrib <> 'status' or
value <> 'closed'
GROUP BY business_key
Run Code Online (Sandbox Code Playgroud)
它需要1秒!!!
试图找出我运行的差异,EXLAIN PLAN FOR但它似乎为两个查询提供相同的信息.
EXLAIN PLAN FOR DISTINCT ...
isAggregated=[false]
columns=[
COLUMN: PUBLIC.MEMORY.BUSINESS_KEY
]
[range variable 1
join type=INNER
table=MEMORY
alias=M
access=FULL SCAN
condition = [ index=SYS_IDX_SYS_PK_10057_10058
other condition=[
OR arg_left=[ …Run Code Online (Sandbox Code Playgroud) 在我的rails应用程序中,用户可以参加活动 -
user.rb
has_many :attendances
has_many :events, through: :attendances
Run Code Online (Sandbox Code Playgroud)
event.rb
has_many :attendances
has_many :users, through: :attendances
Run Code Online (Sandbox Code Playgroud)
...有一个由event_id,user_id和其他一些零碎组成的考勤表 -
attendance.rb
belongs_to :user
belongs_to :writers_event
Run Code Online (Sandbox Code Playgroud)
在寻找特定的出勤时,我发现自己正在使用.where ... .first - 例如
attendance = Attendance.where(user_id: @user.id, event_id: this_event_id).first
Run Code Online (Sandbox Code Playgroud)
让我感到震惊的是,我错过了课堂,我们谈到了find_by在这种情况下使用的东西- 换句话说,你确信你正在寻找独特的东西.这可能没关系,但是搜索一个集合然后从中获取第一个对象会感到浪费和错误.
有没有更好的办法?
我环顾四周,这是最接近的,但不(我认为)真的覆盖它.如何通过has_many关系显示唯一记录?