Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

ekspor penggunaan memori dari database ke csv di php

Hanya menggunakan dua tabel:

Kueri asli Anda:

SELECT subscribers.email_address, 
       subscribers.first_name, 
       subscribers.last_name, 
       t1.value AS Languages 
  FROM subscribers 
  LEFT JOIN (SELECT subscriber_id, 
                    field_id, 
                    GROUP_CONCAT(value SEPARATOR '|') AS value 
               FROM subscribers_multivalued 
              WHERE field_id=37 
              GROUP BY subscriber_id, field_id
            ) AS t1 
         ON subscribers.subscriber_id=t1.subscriber_id 
        AND t1.field_id=37 
 WHERE (list_id=49) 
   AND (state=1)

memberikan penjelasan rencana:

id  select_type  table                    type  possible_keys  key         key_len  ref    rows  Extra
1   PRIMARY      subscribers              ref   FK_list_id     FK_list_id  4        const  2     Using where
1   PRIMARY      <derived2>               ALL   NULL           NULL        NULL     NULL   5      
2   DERIVED      subscribers_multivalued  ALL   field_fk       field_fk    4               11    Using filesort

Saran bergabung saya:

SELECT subscribers.email_address, 
       subscribers.first_name, 
       subscribers.last_name, 
       GROUP_CONCAT(t1.value SEPARATOR '|') AS Languages 
  FROM subscribers 
  LEFT JOIN subscribers_multivalued t1 
         ON subscribers.subscriber_id=t1.subscriber_id 
        AND t1.field_id=37 
 WHERE (list_id=49) 
   AND (state=1)
 GROUP BY subscribers.email_address, 
          subscribers.first_name, 
          subscribers.last_name

memberikan penjelasan rencana:

id  select_type  table        type  possible_keys           key            key_len  ref                             rows  Extra
1   SIMPLE       subscribers  ref   FK_list_id              FK_list_id     4        const                           2     Using where; Using filesort
1   SIMPLE       t1           ref   subscriber_fk,field_fk  subscriber_fk  4        test.subscribers.subscriber_id  1      

Meskipun saya hanya mengisi dua tabel tersebut dengan volume data yang sangat kecil, ini menunjukkan kepada saya bahwa versi kueri saya akan dieksekusi lebih efisien terhadap database, karena tidak menggunakan tabel turunan yang dihasilkan kueri Anda.

Tabel lainnya dapat ditautkan ke dalam kueri dengan cara yang hampir sama, dan seluruh hasil dikumpulkan langsung ke file csv daripada diuraikan lebih lanjut dengan PHP.

Ini akan memberi Anda lari yang lebih cepat dan lebih hemat memori.

EDIT

SELECT subscribers.email_address, 
       subscribers.first_name, 
       subscribers.last_name, 
       GROUP_CONCAT(DISTINCT t1.value SEPARATOR '|') AS Colors, 
       GROUP_CONCAT(DISTINCT t2.value SEPARATOR '|') AS Languages 
  FROM subscribers 
  LEFT JOIN subscribers_multivalued AS t1 
         ON subscribers.subscriber_id=t1.subscriber_id 
        AND t1.field_id=112 
  LEFT JOIN subscribers_multivalued AS t2 
    ON subscribers.subscriber_id=t2.subscriber_id 
   AND t2.field_id=37 
 WHERE (list_id=49) 
 GROUP BY subscribers.email_address, 
          subscribers.first_name, 
          subscribers.last_name

Perhatikan penggunaan DISTINCT dalam fungsi GROUP_CONCAT()



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Saya memiliki array bilangan bulat, bagaimana cara menggunakan masing-masing dalam kueri mysql (dalam php)?

  2. Memasukkan beberapa array file gambar ke dalam database

  3. Bagaimana cara melewatkan variabel sesi di url JDBC dengan benar?

  4. Mencocokkan catatan dari dua tabel

  5. Bagaimana cara mencari banyak kolom dengan prioritas di MySQL?