sql >> Database teknologi >  >> RDS >> Mysql

Praktisk grænse for længden af ​​SQL-forespørgsel (specifikt MySQL)

Når jeg læser din forespørgsel, får jeg lyst til at spille en RPG.

Dette er bestemt ikke for lang tid. Så længe de er godt formateret, vil jeg sige, at en praktisk grænse er omkring 100 linjer. Derefter er det bedre at dele underforespørgsler op i visninger bare for at forhindre dine øjne i at krydse hinanden.

Jeg har arbejdet med nogle forespørgsler, der er mere end 1000 linjer, og det er svært at fejlfinde.

Må jeg forresten foreslå en omformateret version? Dette er mest for at demonstrere vigtigheden af ​​formatering; Jeg stoler på, at dette bliver lettere at forstå.

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. MariaDB JSON_MERGE_PRESERVE() Forklaret

  2. hvordan man udfører mysql-kommandoen DELIMITER

  3. Open source-data vokser op:Vælger MySQL, NoSQL eller begge dele

  4. Hvad er LENGTH() i MySQL?