我正在重复Mongus Pong提出的问题 为什么使用临时表比嵌套查询更快?没有一个适合我的答案.
我们大多数人在某些时候发现,当嵌套查询达到某种复杂性时,需要将其分解为临时表以保持其性能.这是荒谬的,这可能永远是最实用的方式向前意味着这些过程不能再被制作成图.通常第三方BI应用程序只能很好地与视图一起使用,因此这是至关重要的.
我确信必须有一个简单的查询计划设置,使引擎只是依次为每个子查询假脱机,从内到外工作.没有第二个猜测它如何使子查询更具选择性(它有时非常成功)并且没有相关子查询的可能性.只是程序员打算通过括号之间的自包含代码返回的数据堆栈.
我常常发现,简单地从子查询更改为#table需要花费120秒到5秒的时间.本质上,优化器在某个地方犯了一个重大错误.当然,可能有非常耗时的方式我可以诱使优化器以正确的顺序查看表,但即使这样也无法保证.我不是要求理想的2秒执行时间,只是temp tabling在视图灵活性范围内提供的速度.
我以前从未在这里发帖,但我已经写了多年的SQL,并且已经阅读了其他有经验的人的评论,他们也刚刚接受了这个问题,现在我只想让合适的天才前进并说出来特别提示是X ...
sql-server optimization performance query-optimization sql-server-2008
它说我的参数中有一个意想不到的标记.
"ActionDispatch::Http::Parameters::ParseError: 765: unexpected token at 'conversation_identifier[participant_list][]=2&conversation_identifier[participant_list][]=1"
为清晰起见,带有幻数的测试版本:
let(:headers) do
{ 'HTTP_CURRENT_USER_ID' => 2,
'Content-Type' => 'application/json' }
end
let(:params) { { conversation_identifier: { participant_list: [1, 2] } }
it 'is getting testy' do
post resource_url, params: params, headers: headers
assert_equal 201, response.status
end
Run Code Online (Sandbox Code Playgroud)
现在这就是奇怪的.如果我没有标题,它可以解析那些参数.
我在Rails 4应用程序上有一个ruby,使用设计和用户模型以及交易模型.
我正在user_deals
为User和Deal之间的has_many/has_many关系创建一个表.
这是迁移
class CreateUserDeals < ActiveRecord::Migration
def change
create_table :user_deals do |t|
t.belongs_to :user
t.belongs_to :deal
t.integer :nb_views
t.timestamps
end
end
end
Run Code Online (Sandbox Code Playgroud)
当用户加载一个Deal(例如Deal id = 4)时,我使用一个名为的方法 show
controllers/deal.rb
#for the view of the Deal page
def show
end
Run Code Online (Sandbox Code Playgroud)
在这个Deal id = 4页面的视图中,我需要current_user
在用户当前所在的Deal页面中显示Devise的视图.
deal/show.html
here is the nb of views of user: <% current_user.#{deal_id}.nb_views%>
Run Code Online (Sandbox Code Playgroud)
让我们说我有10M + user_deals
线,我想知道我是否应该使用索引
add_index :user_deals, :user_id
add_index :user_deals, :deal_id
Run Code Online (Sandbox Code Playgroud)
或者可能
add_index(:deals, [:user_id, deal_id])
Run Code Online (Sandbox Code Playgroud)
确实在其他情况下我会说是,但在这里我不知道Rails如何在幕后工作.感觉好像Rails是知道的,而不需要我来加快这一进程,......该怎么办,就好像当Rails的负载这种观点是没有SQL查询(如"找到的意见处,NB user_id= x
和deal_id= Y …
我一直在寻找使用该配方的流程的例子
WHERE a NOT IN (SELECT b FROM x)
Run Code Online (Sandbox Code Playgroud)
只是返回零行似乎是错误的.如果我将NOT IN更改为IN,则它不会返回inverse(所有行),实际上它会遗漏a中非null的所有行.这种情况已经开始发生在过夜的例程中,这些例程已经运行多年并且没有改变.感觉SQL Server中存在一个错误.
我可以通过重新制定来解决这个问题
LEFT JOIN x on a = b
WHERE b IS NULL
Run Code Online (Sandbox Code Playgroud)
但这不是我想拥有的东西.
这可能与统计数据有关吗?一个已知的bug?在最近的示例中,子查询中的表位于远程链接服务器上,但我不确定每次我看到它时都是如此.
Dockerized数据库将不再启动,因为...
FATAL: could not write lock file "postmaster.pid": No space left on device
Run Code Online (Sandbox Code Playgroud)
我的硬盘上有数百Gb的可用空间,尽管我确实相信某些空间已用完。在尝试从备份还原45Gb数据库之后,首先出现了此问题。在此期间,我的Docker.qcow2
文件膨胀到60Gb。Hypervisor对该VM文件的大小有限制吗?在Mac上使用Docker。
从docker-compose.yml
以下位置删除这些行似乎以某种方式导致了相同的错误,这似乎是一个线索:
volumes:
- website_database_volume:/var/lib/postgresql/data
Run Code Online (Sandbox Code Playgroud)
(是的,我理智地检查了其他属性是否使我位于文件的右侧)
的输出 docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 21 16 4.58 GB -7.44e+09 B (-162%)
Containers 827 3 28.69 MB 28.69 MB (99%)
Local Volumes 5 5 57.02 GB 0 B (0%)
Run Code Online (Sandbox Code Playgroud) sql-server ×2
activerecord ×1
devise ×1
docker ×1
optimization ×1
performance ×1
ruby ×1
sql ×1