Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Praktyczny limit długości zapytania SQL (w szczególności MySQL)

Przeczytanie twojego zapytania sprawia, że ​​chcę grać w RPG.

To zdecydowanie nie jest za długo. Dopóki są dobrze sformatowane, powiedziałbym, że praktyczny limit to około 100 linii. Następnie lepiej jest podzielić podzapytania na widoki, aby nie spuszczać oczu.

Pracowałem z niektórymi zapytaniami, które mają ponad 1000 linii i są trudne do debugowania.

Przy okazji, czy mogę zasugerować przeformatowaną wersję? Ma to głównie na celu zademonstrowanie znaczenia formatowania; Ufam, że będzie to łatwiejsze do zrozumienia.

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. BŁĄD 1030 (HY000) w wierszu 25:Wystąpił błąd 168 z silnika pamięci masowej

  2. Używanie zmiennej env w application.properties Spring Boot

  3. Problem z dodawaniem wierszy z JDBC i MySQL?

  4. Czy mogę przechowywać obrazy w MySQL?

  5. Połączenie VB.NET MySQL