Mysql
 sql >> база данни >  >> RDS >> Mysql

Изключване на записи, при които подзаявката връща резултати, които трябва да се изключват взаимно

И беше грозно. Работи добре, докато има някакво друго значително натоварване на DB, а след това всичко върви много бавно. Това се дължи най-вече на ограниченията на IO на сървъра, но по-простият подход беше да получите isfiction и isNonFiction в таблиците MEMORY и изразът DELETE може да изглежда така:

    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

При тестване това намалява целия процес от около 90 секунди на 10 секунди.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какъв е еквивалентът на LEN() в MySQL?

  2. Вземете имена на колони и стойности в цикъла for PHP

  3. Проверете за валидно име на SQL колона

  4. VB.NET:Инициализаторът на типа за 'MySql.Data.MySqlClient.Replication.ReplicationManager' хвърли изключение

  5. Заявката на Mysql с Left Join е твърде много бавна