sql >> Database >  >> RDS >> Mysql

Praktische limiet voor de lengte van de SQL-query (met name MySQL)

Als ik je vraag lees, krijg ik zin om een ​​RPG te spelen.

Dit is zeker niet te lang. Zolang ze goed zijn opgemaakt, zou ik zeggen dat een praktische limiet ongeveer 100 regels is. Daarna kunt u subquery's beter opsplitsen in weergaven om te voorkomen dat uw ogen elkaar kruisen.

Ik heb met een aantal query's gewerkt die meer dan 1000 regels bevatten en die moeilijk te debuggen zijn.

Mag ik trouwens een opnieuw geformatteerde versie voorstellen? Dit is vooral om het belang van opmaak aan te tonen; Ik vertrouw erop dat dit gemakkelijker te begrijpen is.

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. MySQL relationele databases gebruiken op Debian 5 (Lenny)

  2. Wat is een goede naamgevingsconventie voor MySQL FK's?

  3. Oracle invoegen in tabel2 en vervolgens verwijderen uit tabel1, uitzondering indien mislukt

  4. HTML-tags verwijderen in PostgreSQL