sql >> Database teknologi >  >> RDS >> PostgreSQL

Forbedring af ydeevnen i PostgreSQL 9.6 lagret procedure

I dit tilfælde vil optællingen ikke opdateres, når bruger-id for produktet ændres, så jeg vil anbefale counter_cache af skinner

class Product < ActiveRecord::Base
  belongs_to :user, counter_cache: true
end

Tag også et kig på denne perle

Bemærk:- Dette løser ikke din pr. række indsættelse problem dog

Du er nødt til at skrive tilpasset tæller så, noget som at følge

class Product < ApplicationRecord
  has_many :products
  attr_accessor :update_count

  belongs_to :user#, counter_cache: true

  after_save do
    update_counter_cache
  end

  after_destroy do
    update_counter_cache
  end

  def update_counter_cache
    return unless update_count
    user.products_count = user.products.count
    user.save
  end
end

i skinnekonsol

10.times{|n| Product.new(name: "Latest New Product #{n}", update_count: n == 9, user_id: user.id).save}


  1. MySQL:Hvis jeg bruger en funktion i SQL-forespørgsel mere end én gang, bliver den genberegnet hver gang?

  2. Mysql-forespørgsel for at finde ID, hvor flere betingelser opfyldes for en kolonne

  3. Dvalesekvens nextVal løst, men ikke brugt (Oracle)

  4. Sortering/bestilling i MySQL