【发布时间】:2010-09-10 22:13:48
【问题描述】:
拥有大量(可能是冗余的)WHERE 子句的非常非常大的 SQL 查询是不是特别糟糕?
例如,这是我从我的 Web 应用程序中生成的一个查询,所有内容都已关闭,这应该是该程序生成的最大可能查询:
SELECT *
FROM 4e_magic_items
INNER JOIN 4e_magic_item_levels
ON 4e_magic_items.id = 4e_magic_item_levels.itemid
INNER JOIN 4e_monster_sources
ON 4e_magic_items.source = 4e_monster_sources.id
WHERE (itemlevel BETWEEN 1 AND 30)
AND source!=16 AND source!=2 AND source!=5
AND source!=13 AND source!=15 AND source!=3
AND source!=4 AND source!=12 AND source!=7
AND source!=14 AND source!=11 AND source!=10
AND source!=8 AND source!=1 AND source!=6
AND source!=9 AND type!='Arms' AND type!='Feet'
AND type!='Hands' AND type!='Head'
AND type!='Neck' AND type!='Orb'
AND type!='Potion' AND type!='Ring'
AND type!='Rod' AND type!='Staff'
AND type!='Symbol' AND type!='Waist'
AND type!='Wand' AND type!='Wondrous Item'
AND type!='Alchemical Item' AND type!='Elixir'
AND type!='Reagent' AND type!='Whetstone'
AND type!='Other Consumable' AND type!='Companion'
AND type!='Mount' AND (type!='Armor' OR (false ))
AND (type!='Weapon' OR (false ))
ORDER BY type ASC, itemlevel ASC, name ASC
它似乎工作得很好,但它的流量也不是特别高(每天大约有几百次点击),我想知道是否值得努力优化查询以消除冗余等。
【问题讨论】:
-
当您尝试使用该网站时,它是否看起来很慢?如果每天只有几百次点击,我想你不用担心。你预计流量会增加吗?多少?如果您没有时间紧迫,您可以这样做,以使该网站面向未来。但是,以编程方式查找和删除冗余所需的时间是否大于运行查询所需的时间?
-
1.感谢您回答问题,我认为查询的大小现在对我来说应该不是问题。 2.谢谢大家对格式化SQL的提示。我是新手,有很多我不知道的技巧(例如“不输入(...)”) 3. 作为附录,这是一个 PHP/MySQL 应用程序
-
这是一个有用的在线 SQL 格式化程序:sqlinform.com
标签: mysql sql optimization