Ò»´ÎÉñÆæµÄSQL ´íÎóµ÷ÊÔ¾Àú
ÉÏÖܽӵ½Ò»¸öÆæ¹ÖµÄbug£¬Ò»¸öÔø¾ÔËÐеúܺõĴ洢¹ý³ÌͻȻ²úÉúÁË´íÎóµÄ½á¹û¡£
¸ºÔðά»¤µÄÐÖµÜÃǺܸºÔðÈεĶԴíÎó½øÐÐÁ˸ú×Ù£¬²¢°Ñ´íÎó¶¨Î»Ò»¸öÈçϵÄÓï¾ä£º
SELECT *
into SomeTable
from A join B on A.id=B.id
join C on A.id=C.id
ËûÃÇ·¢ÏÖ´ÓSomeTable×ö²éѯµÄʱºò£¬³öÀ´µÄ½á¹û±Èʵ¼Ê½á¹ûÒª´óÈô¸É±¶£¬Í¦ÆëÕûµÄ£¬4±¶»òÕß2±¶¡£
ÎҵĵÚÒ»¸ö¸Ð¾õÊÇJOIN³öÎÊÌâÁË£¬±ØÈ»ÊÇÐγÉÁ˶à¶Ô¶àµÄJOIN£¬±ÈÈçAÀïÃæÓÐÁ½ÐÐIDÒ»Ñù£¬BÒ²ÓÐÁ½ÐÐIDÒ»Ñù£¬½á¹û±í¾Í»á³öÏÖ4ÐÐÒ»ÑùµÄ£¬µÃµ½Ò»¸ö4±¶µÄ½á¹û£¬Í¬ÑùµÄµÀÀí£¬Èç¹ûAÀïÓÐÒ»ÐУ¬BÀïÓÐ2ÐУ¬½á¹û¾ÍÊÇ2±¶ÁË¡£
ÓÚÊÇÎÒÈÃËûÃǰÑSomeTable×ö³ÉÒ»¸öÎı¾Îļþ´«¸øÎÒ£¬àÅ£¬300MµÄÒ»¸öÎļþ£¬BCPµ½Êý¾Ý¿âÀSELECTÁËÒ»°Ñ£¬°Ñ³öÎÊÌâµÄÄǸöID×¥³öÀ´£¬¹ûÈ»¿´µ½¼¸¸öÖØ¸´µÄÐС£È·ÇеÄ˵¿´µ½¼¸Áм¸ºõÒ»ÑùµÄÐС£
ÓÚÊÇÎÒ¾ÍÐ˳å³åµÄ¸øËûÃÇ˵£¬¼ì²ìÒ»ÏÂBºÍCÉÏÃæµÄIDÊÇ·ñÊÇuniqueµÄ¡£
½á¹ûºÜ¿ì·µ»Ø£¬Ëµ£¬ÊÇuniqueµÄ¡£
ÕâÏÂÎÒ¾ÍɵÑÛÁË£¬ÕâÔõô¿ÉÄÜÄØ¡£ÖØÐÂ×ÐϸµÄ¿´Á˱ãÉϴβ鴦µÄ½á¹û£¬·¢ÏÖÔ±¾ÒÔÎªÖØ¸´µÄÐУ¬¾¹È»²»ÊÇÍêÈ«ÏàͬµÄ£¬àÅ£¬ÓÐÒ»ÁÐÊDz»Í¬µÄ£¬¶øÕâÒ»ÁÐÕýʽB.ID¡£Çë×¢Ò⣬ÕâЩÐÐÔÚA.idÉÏÊÇÒ»ÑùµÄ¡£
ÕâÊÇÒ»¸ö¾ªÈ˵ķ¢ÏÖ£¬ÎÒͨ¹ýA JOIN B JOIN C³öÀ´µÄ½á¹û¾ÓÈ»²»Âú×ãJIONµÄÌõ¼þ£¬Õâ³¹µ×µß¸²Á˶àÄêѧϰµÄ¹ØÏµÊý¾Ý¿â֪ʶ¡£
ºÁÎÞÒÉÎÊ£¬ÕâÊÇSQL ServerµÄÒ»¸öbug¡£È»¶øÈçºÎ½¨Ò»¸ö×îСµÄÊý¾Ý¼¯ºÏÀ´ÖØÏÖÕâ¸öbug³ÉÁËеÄÌôÕ½¡£ÒòΪABCÈý¸ö±í¼ÓÆðÀ´ÓÐ200G£¬¶øÈç¹ûÎÒɾµôһЩ¿´ÆðÀ´²»Ïà¹ØµÄÐУ¬´íÎó¾ÍÏûʧÁË¡£ÎÒÒ²ÊÔͼ½«ABCµÄJION·Ö³ÉÁ½²½À´×ö£¬
±ÈÈ磺
select *
from
(SELECT * from A JOIN B) AS D
JOIN C ON...
½á¹ûÈÔÈ»´íÎó¡£
µ«ÊÇÈç¹ûÔÙ½øÒ»²½£¬
SElect * into temp from A join B...
Select * from temp join C...
´íÎóÏûʧÁË¡£
Ç¿¼¼ÇîÖ®ºó£¬°³Ö»ºÃÇó¾ÈÓÚSQl serverµÄ¼¼ÊõÖ§³Ö¡£¸Õ¿ªÊ¼·¢ÁË·âÐÅ£¬ÎÊÓÐûÓÐÈËÓöµ½¹ýÕâÖÖÎÊÌ⣬ABC ½»³öµÄ½á¹û°üº¬²»Âú×ãJOINÌõ¼þµÄÐС£½á¹ûÒ»¸öС×Ó¾ÓȻ˵£¬Õâ¸öÎÊÌâÌ«»ù±¾£¬ÕâÖÖÇé¿ö¸ù±¾²»¿ÉÄܳöÏÖ¡£ Sigh£¬´óÊåÎÒÒ²²»ÊÇÐÂÊÖ£¬¼òµ¥ÎÊÌ⻹ÐèÒªÀÍ·³ÄúÀÏÈ˼ÒÂð¡£
ÓÚÊÇÔÙ×ÐϸµÄÃèÊöÎÊÌ⣬ÖÕÓÚ³öÁËÒ»¸ö±È½Ï¿¿Æ×µÄ¸çÃÇ£¬ÈÃÎÒ°ÑÖ´Ðмƻ®·¢¸øËû¿´¿´¡£ÔÙÈ»ºóÁíÍâÒ»¸ö¸çÃÇ˵¿ÉÄÜÊDz¢·¢ÒýÆðµÄÎÊÌ⣬½¨ÒéÎÒÓÃMAXDOPÀ´ÏÞÖÆ²ÎÓëÖ´ÐеÄCPU¸öÊý¡£ÓÚÊÇ£¬ÎÒÔÚÔÀ´µÄSQLºóÃæ¼ÓÁ˸öOPTION MAXDOP=1£¬¹ûÈ»¾¹ý7·ÖÖÓµÄÖ´ÐУ¬Îҵõ½ÁËÕýÈ·µÄ½
Ïà¹ØÎĵµ£º
ÔÚwindows2003ÏÂÃæ°²×°SQL Server2000£¬»áÌáʾwindows²»Ö§³ÖSQL Server2000µÄ°æ±¾£¬°²×°ºó£¬ÔÚ±¾»úÊÇ¿ÉÒÔÕý³£Ê¹Óõ쬵«ÊÇÎÞ·¨Á¬½Óµ½ÆäËûSQL Server2000µÄ·þÎñÆ÷£¬Ò²ÎÞ·¨Í¨¹ýÆäËû»úÆ÷ÉϵÄSQL Server2000·ÃÎÊ£¬±ØÐë°²×°SQL Server2000sp3»òsp4²¹¶¡²Å¿ÉÒÔ¡£ÆäʵÓÃSQL Server2005¾ÍûÕâôÂé·³ÁË¡£ ......
On BULK COLLECT
By Steven Feuerstein Oracle ACE
Best practices for knowing your LIMIT and kicking %NOTFOUND
I have started using BULK COLLECT whenever I need to fetch large volumes of data. This has caused me some trouble with my DBA, however. He is complaining that although my programs mig ......
DECLARE @temp TABLE(
id INT,
[name] VARCHAR(50),
class VARCHAR(50)
)
INSERT INTO @temp
SELECT 1,'a','A'
UNION ALL SELECT 2,'b','C'
UNION ALL SELECT 3,'c','B'
UNION ALL SELECT 4,'d','C'
UNION ALL SELECT 5,'e','B'
UNION ALL SELECT 6,'f','A'
SELECT * from @temp AS _temp WHERE [name] IN
(
......
ÏÖÔÚLinq to sqlµÄ×ÊÁÏ»¹²»ÊǺܶ࣬±¾ÈËˮƽÓÐÏÞ£¬Èç¹ûÓдí»òÕßÎóµ¼ÇëÖ¸³ö£¬Ð»Ð»¡£
Ò»²½Ò»²½Ñ§Linq to sql£¨Ò»£©£ºÔ¤±¸ÖªÊ¶
Ò»²½Ò»²½Ñ§Linq to sql£¨¶þ£©£ºDataContextÓëʵÌå
Ò»²½Ò»²½Ñ§Linq to sql£¨Èý£©£ºÔöɾ¸Ä
Ò»²½Ò»²½Ñ§Linq to sql£¨ËÄ£©£º²éѯ¾ä·¨
Ò»²½Ò»²½Ñ§Linq to sql£¨Î壩£º´æ´¢¹ý³Ì
Ò»²½Ò»²½ ......