Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Z wyłączeniem rekordów, w których podzapytanie zwraca wyniki, które muszą się wzajemnie wykluczać

I to było brzydkie. Działa dobrze, dopóki DB nie zostanie poważnie obciążone, a potem wszystko idzie bardzo powoli. Wynika to głównie z ograniczeń IO serwera, ale prostszym podejściem było umieszczenie isfiction i isNonFiction w tabelach MEMORY, a instrukcja DELETE może wtedy wyglądać tak:

    DELETE tmp_table FROM tmp_table
         INNER JOIN
         (
            SELECT ASIN, MAX( isFiction ) AS isFiction, MAX( isNonFiction ) AS isNonFiction
            FROM tmp_table
            GROUP BY ASIN
            HAVING isFiction =1
            AND isNonFiction =1
         ) D
         WHERE D.ASIN=tmp_table.ASIN AND tmp_table.isNonFiction=1

W testach skraca to cały proces z około 90 sekund do 10 sekund.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CodeIgniter:Audyt SQL wszystkich wywołań metod $this->db->query()?

  2. Produkt kartezjański MySQL między dwoma instrukcjami SELECT

  3. Mysql/Php - Aktualna data i godzina

  4. Jak zapisywać daty starsze niż znacznik czasu w PHP

  5. Czy można zobaczyć, jakie dane zostały zmienione przez zapytanie?