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

Batas praktis untuk panjang kueri SQL (khususnya MySQL)

Membaca kueri Anda membuat saya ingin bermain RPG.

Ini pasti tidak terlalu lama. Selama diformat dengan baik, saya akan mengatakan batas praktisnya adalah sekitar 100 baris. Setelah itu, Anda lebih baik memecah subkueri menjadi tampilan hanya agar mata Anda tidak melintas.

Saya telah mengerjakan beberapa kueri yang terdiri dari 1000+ baris, dan sulit untuk di-debug.

Omong-omong, bolehkah saya menyarankan versi yang diformat ulang? Ini sebagian besar untuk menunjukkan pentingnya pemformatan; Saya yakin ini akan lebih mudah dipahami.

select *  
from
  4e_magic_items mi
 ,4e_magic_item_levels mil
 ,4e_monster_sources ms
where mi.id = mil.itemid
  and mi.source = ms.id
  and itemlevel between 1 and 30
  and source not in(16,2,5,13,15,3,4,12,7,14,11,10,8,1,6,9)  
  and type not in(
                  'Arms' ,'Feet' ,'Hands' ,'Head' ,'Neck' ,'Orb' ,
                  'Potion' ,'Ring' ,'Rod' ,'Staff' ,'Symbol' ,'Waist' ,
                  'Wand' ,'Wondrous Item' ,'Alchemical Item' ,'Elixir' ,
                  'Reagent' ,'Whetstone' ,'Other Consumable' ,'Companion' ,
                  'Mount'
                 )
  and ((type != 'Armor') or (false))
  and ((type != 'Weapon') or (false))
order by
  type asc
 ,itemlevel asc
 ,name asc

/*
Some thoughts:
==============
0 - Formatting really matters, in SQL even more than most languages.
1 - consider selecting only the columns you need, not "*"
2 - use of table aliases makes it short & clear ("MI", "MIL" in my example)
3 - joins in the WHERE clause will un-clutter your FROM clause
4 - use NOT IN for long lists
5 - logically, the last two lines can be added to the "type not in" section.
    I'm not sure why you have the "or false", but I'll assume some good reason
    and leave them here.
*/


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LAST_INSERT_ID() MySQL

  2. Pesan dalam grup menurut?

  3. SQLite - ORDER OLEH RAND()

  4. PHP mySQL memeriksa apakah nama pengguna dan kata sandi ada di database

  5. Tabel basis data tidak ada menurut kompiler studio Android