आपके द्वारा कभी देखी गई सबसे खराब SQL क्वेरी क्या है? क्या बुरा बना दिया?सबसे खराब एसक्यूएल कभी
उत्तर
DELETE FROM table
टाइप करने और इसे निष्पादित करने के ठीक बाद देखा, मैं WHERE क्लॉज भूल गया था। अब मैं हमेशा एक चयन कथन चलाता हूं और संतुष्ट होने के बाद चयन को हटा देता हूं कि उचित पंक्तियां प्रभावित होंगी।
ओच ..! मैं पागल हूं, मैं हमेशा शुरू/ट्रैन/रोलबैक के साथ विवरणों को हटा देता हूं, इसे आज़माएं और फिर सुरक्षित महसूस करते समय आंतरिक भाग को निष्पादित करें। –
मैं कुछ ऐसा ही करता हूं, सिवाय इसके कि मैं टेबलनाम को टेबलनाम के रूप में लिखता हूं, जबकि मैं इसे संलेखित कर रहा हूं। मैं पूरे ई-मेल और प्रूफ्रेड लिखने से पहले ई-मेल के "टू:" फ़ील्ड को भी खाली रखता हूं ... बस –
@ocdecio: लेनदेन का समर्थन करने से पहले यह MySQL था :( –
* *
वास्तविक बुरा से * चुनें।
* * से चुनें * = '%%'; मैं यह जांचने की हिम्मत नहीं करता कि यह वास्तव में काम करता है या नहीं। –
या कोई भी क्रॉस दो या दो से अधिक उचित टेबल के बीच जुड़ता है। –
दो बड़े लेकिन संकीर्ण तालिकाओं के बीच क्रॉस जॉइनिंग उदाहरण के लिए मिलान सेट के लिए अक्सर एक इष्टतम समाधान होता है - कई से एक आम समस्या – annakata
एक ग्राहक एक varchar क्षेत्र (क्लासिक एएसपी आवेदन) में 3 मूल्यों की एक अल्पविराम सीमांकित सूची भंडारण किया गया था ताकि वे एक संग्रहीत प्रक्रिया है कि कुछ इस तरह देखा था:
SELECT *
FROM
SomeTable
WHERE
Field LIKE @Param + ',%'
OR
Field LIKE '%,' + @Param + ',%'
OR
Field LIKE '%,' + @Param
कारण है कि यह भयानक :)
आउच! यह मेरे दांतों को चोट पहुंचाता है! –
मैंने एक बड़े उत्पादन कार्यक्रम में समान चीजें देखी हैं: एस –
क्या यह लिखने का एक बेहतर तरीका है? – Alterlife
हाल ही में, मैं एक (से अधिक) 4000 लाइन TSQL संग्रहीत प्रक्रिया था देखा है है यह स्पष्ट होना चाहिए टी पते के हिस्सों के मिलान के लिए आईएफ स्टेटमेंट की एक श्रृंखला थी। इसे 50 से कम लाइनों तक घटाया जा सकता है!
मैं भविष्य में DailyWTF के लिए कोड सहेज रहा हूं!
SELECT * FROM some_table;
यह इतना बुरा क्यों बना था कि कोड टाइमस्टैम्प के आधार पर परिणाम प्राप्त करने पर निर्भर था। इससे पहले कि मैंने इसे ठीक करने के लिए बुलाया था, इससे कुछ समय पहले यह काम करता था।
select * from users where clue > 0;
0 results found.
इस एसक्यूएल के बारे में सबसे बुरी बात यह है कि यह कभी भी कोई परिणाम नहीं देता है, चाहे आप इसे –
चलाएं, यही कारण है कि हम टिप्पणियों को ऊपर उठाने में सक्षम होना चाहिए:) –
क्या होता है आप इस क्वेरी को स्टैक ओवरफ़्लो डेटाबेस पर क्यों चलाते हैं? क्या यह अभी भी 0 परिणाम लौटाता है? या यह सिर्फ उपयोगकर्ता आईडी 22656 – Kibbee
यह शायद सबसे खराब नहीं है, लेकिन मैं अभी तक भी अक्सर यह देखने (Misuse of the group by clause):
SELECT
C.CustomerID, C.CustomerName, C.CustomerType, C.Address1, C.City,
C.State, SUM(S.Sales) as TotalSales
FROM
Customers C
INNER JOIN Sales S
ON C.CustomerID = S.CustomerID
GROUP BY
C.CustomerID, C.CustomerName, C.CustomerType, C.Address1, C.City, C.State
के बजाय:
SELECT
C.CustomerID, C.CustomerName,
C.CustomerType, C.Address1, C.City,
C.State, S.TotalSales
FROM
Customers C
INNER JOIN
(SELECT CustomerID, SUM(Sales) as TotalSales FROM Sales GROUP BY CustomerID) S
ON
C.CustomerID = S.CustomerID
इस पर मुझे कॉल करें आप करेंगे लेकिन मैं असहमत हूं कि एक नियम के रूप में 1 खराब है और 2 अच्छा है। एक और जटिल उदाहरण के साथ, 2 बनाए रखने के लिए काफी कठिन हो जाता है। मेरे लिए, 1 अपने इरादे में बहुत स्पष्ट है और इसके लिए, बनाए रखने के लिए आसान है। 2 बेहतर प्रदर्शन की पेशकश कर सकते हैं लेकिन लाभ इसके लायक नहीं हो सकता है। –
इसके अलावा, नियम 2 mysql के नीचे धीमा है। माई एसक्यूएल--। उत्तरार्द्ध यदि आप इसे अलग करते हैं और अंतिम क्वेरी लिखने के लिए स्ट्रिंग-प्रतिस्थापन का उपयोग करते हैं तो भी अधिक रखरखाव योग्य होता है। इनर जॉइन ($ ग्राहकटॉटल्स): डी –
क्या वाक्यविन्यास 2 के साथ कोई अतिरिक्त शामिल नहीं होगा? रोचक रिफैक्टरिंग के लिए – erikkallen
मेरा अपना है, जो दूर है यहां पोस्ट करने के लिए लंबे समय तक - 3500 लाइनों पर बंद करना
मुझे वास्तव में एक बिल्कुल भयानक स्कीमा के साथ दोष साझा करना है। कुछ यूनियनों का उपयोग करके denormalized डेटा pivoting में एक सरल अभ्यास के रूप में शुरू किया क्या एक अनावश्यक दुःस्वप्न में बदल गया। मरम्मत की जरूरत में बुरी तरह से है।
धावक अप यह है:
select
case datepart(mm,getdate())
when 1 then 'Jan'
when 2 then 'Feb'
when 3 then 'March'
when 4 then 'Apr'
when 5 then 'May'
when 6 then 'Jun'
when 7 then 'July'
when 8 then 'Aug'
when 9 then 'Sept'
when 10 then 'Otc'
when 11 then 'Nov'
when 11 then 'Dec'
end
उस पोस्ट में टाइप की कोई गलती - यह है कि यह कैसे लिखा गया था है। धन्यवाद, परामर्श डॉलर!
पाठ्यक्रम चयन युक्त पुनर्संशोधित की मैं चला गया (datename (मिमी, getdate()), 3)
11 नवंबर और दिसंबर दोनों में मैप किया गया ?? वास्तव में? – abelenky
हमने दिसंबर में इस मणि की खोज की। –
एक कार्यस्थल में जो नामहीन रहेगा, आपका फिक्स वास्तव में फेंक दिया जाएगा क्योंकि यह "सितंबर" और "मार्च" के लिए वर्तनी को तोड़ता है (कभी भी यह नहीं कि यह एक बग को ठीक करता है)। – dreftymac
यह ज़ोर से पढ़ें।
select [select],*,star as [as] from [from],[order] order by [by]
क्या ऐसा कुछ होना चाहिए जैसे http://slashdot.org – Kibbee
जब मुझे पहली बार मेरा वर्तमान काम मिला तो मेरा पहला प्रोजेक्ट एक ऐसा ऐप्लिकेशन बनाना था जो हमारे कंप्यूटर प्रयोगशालाओं में हमारे लाइसेंस उपयोग डेटा को सारांशित करता था।उन्होंने जोर देकर कहा कि वह बैकएंड डेटाबेस को सामान्यीकृत नहीं करना चाहते थे क्योंकि जुड़ने "बहुत महंगा" थे। यह मेरा पहला सप्ताह है, मैं बहस करने की स्थिति में नहीं था।
अब, डेटाबेस से किसी भी उपयोगी डेटा को निकालने के लिए, प्रत्येक पंक्ति में डुप्लीकेट डेटा को हटाने के लिए सारांश को निकालने के लिए प्रत्येक क्वेरी में denormalization को "पूर्ववत" करना होगा। बेशक, ये एकमात्र प्रश्न हैं जिनका वास्तव में उपयोग किया जाता है। के लिए होने की प्रक्रिया -
select location, sum(login_time) as total_login_time
from
(select location, session_id, max(login_time) as login_time
from sessions
where location in ('lab1','lab2')
and session_start >= @start_date
and session_end <= @end_date
group by location, session_id) tbl
group by location
हालांकि, क्वेरी ही विशेष रूप से बदसूरत नहीं है - कुछ है, हालांकि: आप नेस्ट चयन, जैसे कि पूरी तरह से अनावश्यक है, तो डेटा सामान्यीकृत थे होगा की एक बहुत कुछ देखना अनावश्यक denormalization दर्द को पूर्ववत करने के लिए हर बार हुप्स के माध्यम से कूदो।
अब बॉस चला गया है, लेकिन मैं इसे फिर से लिखने के लिए समय नहीं है ...
आपके लिए डेटा को denormalise करने के लिए कुछ विचार करें: D –
यह बहुत से स्तरों पर गलत है। विशेष रूप से "बहुत महंगा" होने के बारे में टिप्पणी। –
some_table कहां में some_thing से हटाएँ (correct_table से some_column_from_wrong_table का चयन करें जहां some_id = कुछ)।
कुछ_column_from_wrong_table में एक स्तंभ है जो तालिका में भी नहीं था, लेकिन यह एक और तालिका में था। समस्या सही_टेबल को 'इवेंट' नाम दिया गया था और किसी भी तरह से यह पंक्तियों की बजाय सभी पंक्तियों को वापस कर दिया गया था (या अधिक महत्वपूर्ण बात, एक त्रुटि!)।
दो सबक सीखे: कभी भी, किसी भी परिस्थिति में, कभी भी सिस्टम नाम के रूप में एक तालिका का नाम दें। दूसरी बात पहले चयन कथन चलाया गया था, फिर हटाने के लिए बदलें।
यह एसक्यूएल सर्वर 2005 तक था। मैं अभी भी परेशान हूं कि यह एक त्रुटि फेंक नहीं है।
एक एक्सेस डेटाबेस में, वहाँ निम्नलिखित की तरह एक प्रश्न था:
SELECT *
FROM Bad_2 INNER JOIN Bad_1 ON Bad_2.Bad_1_id = Bad_1.ID;
और दोनों तालिकाओं में एक ही नाम के साथ एक क्षेत्र था। जब एक्सेस दूसरी बार फ़ील्ड नाम में आता है, तो यह इसके लिए एक नया नाम बनाता है। पिछले व्यक्ति ने जेनरेट किए गए फ़ील्ड नाम को कोड में इस्तेमाल किया था।
मेरे समय में एसक्यूएल के कई दुखी टुकड़े देखे गए। जो दिमाग में आता है वह
फ़ाइल से लोड डेटा, उस फ़ाइल पर लूप, फ़ाइल में प्रत्येक पंक्ति के लिए डीबी एक्सेस करना है।
प्राथमिक कुंजी लुकअप के लिए भी 10 या तो लाइनों, 100K-1million = बुरा के साथ परीक्षण सिस्टम पर ठीक लगता है।
बीटीडब्ल्यू, समाधान डेटा को डीबी में लोड करना और सेट में सोचना है।
- अपना पसंदीदा लैंग उदाहरण चुनें। मोती, अज़गर ... डेटा संरचना में
लोड फ़ाइल (जैसे सरणी)
for (1 .. n) loop
myid := array[n];
select * from table where id = myid;
if the row exists update table set ... where id = myid;
end loop;
सबसे बुरे एक SQL क्वेरी हर की उपयोग:
एक चयन करें क्वेरी है कि संख्या की गणना एक निश्चित स्थिति से संबंधित लाइनों के लिए, लूप के लिए रोक की स्थिति में बुलाया जाता है।
कुछ इस तरह:
for(int i = 0; i < query("SELECT COUNT .... WHERE ..."); i++)
{
}
और नहीं, क्वेरी का परिणाम हर यात्रा नहीं बदलता है। हां, मुझे एहसास है कि सर्वर परिणाम कैश करने जा रहा है।
comp.databases.informix समाचार समूह के लिए एक पोस्टिंग में - एक वास्तविक काम कर इन्फोर्मिक्स तालिका (जो मैं उपयोग करने की अनुशंसा नहीं):
CREATE TABLE VIEW
(
DECIMAL CHAR(30),
NOT INTEGER NOT NULL,
SERIAL DATE NOT NULL,
NULL CHAR(1) NOT NULL,
INTEGER DECIMAL(13,6) NOT NULL
);
यह (मामूली) में मदद करता है अगर आप जानते हैं कि सीरियल इन्फोर्मिक्स डेटाबेस में एक प्रकार है - मूल रूप से, स्वचालित रूप से आवंटित संख्याओं को क्रमशः उत्पन्न करने के लिए प्रकारों में से एक।
मुझे दैनिक 0t पर एक reposted recently पसंद आया, जो कहानी इसके साथ आता है वह भी अद्भुत है।
एक पीएल/एसक्यूएल (ओरेकल) संग्रहित प्रो जो Bubble Sort का उपयोग करके परिणाम सेट को सॉर्ट करता है। यह पता चला था कि जब मैं और डीबीए को गंभीर प्रदर्शन समस्या का पता लगाने के लिए कहा गया था। एक ओरेकल "विशेषज्ञ" डेवलपर ने एक सप्ताह से अधिक समय तक काम किया था। उन्होंने सीधे सीधा चेहरा समझाया कि उन्होंने अपने कंप्यूटर विज्ञान वर्ग में बबल सॉर्ट के बारे में सीखा। एल्गोरिदम आमतौर पर खराब प्रदर्शन को चित्रित करने के लिए उपयोग किया जाता है।
क्लॉज द्वारा ऑर्डर के साथ पूरी गड़बड़ी को बदल दिया। परिमाण के कई आदेशों द्वारा प्रदर्शन में सुधार हुआ।
कुछ ओरेकल सलाहकार हो सकते हैं जो असहनीय रूप से खराब नहीं हैं लेकिन मैंने कभी एक नहीं मुलाकात की है। मैंने एक समूह के साथ काम किया जिसका ओरेकल "विशेषज्ञ" ने चाबियों से बंधे "बैट" फ़ाइलों का उपयोग करके एक संपूर्ण लेखा कार्यक्रम लिखा था। इस प्रकार, "आईबैट" ने चालान फॉर्म चलाया, "आर। बाट" रिपोर्ट चला। हां, यह 90 के उत्तरार्ध में था। –
मुझे लगता है कि यह सबसे खराब (विशेष रूप से एक दर्दनाक और अशक्त रोलबैक के बाद) है:
DROP DATABASE;
ROLLBACK;
SUBSTRING ( (SUBSTRING (अंतिम नाम, 0, CHARINDEX (', अंतिम नाम)) +', ' + प्रथम), 0, CHARINDEX ('', (SUBSTRING (अंतिम नाम, 0, CHARINDEX (', अंतिम नाम)) +', '+ प्रथम), LEN (अंतिम नाम) + 3) )
वे स्पष्ट रूप से आरटीआरआईएम से परिचित नहीं थे;
RTRIM (अंतिम नाम) + ',' + RTRIM (प्रथम)
SELECT name FROM categories WHERE id IN (".implode(",",corrected_cats($ad->id)).") ORDER BY name ASC
हाँ, यदि आप एक क्षेत्र में है कि सही है ... अल्पविराम से अलग क्षेत्रों पढ़ रहे हैं।
- 1. छवि का आकार बदलना - कभी-कभी बहुत खराब गुणवत्ता?
- 2. खराब इनपुट
- 3. एसक्यूएल सर्वर खराब और सर्वोत्तम अभ्यास
- 4. कभी-कभी सरणी और कभी-कभी
- 5. टोस्ट.मेकटेक्स्ट (...)। शो() को कभी-कभी
- 6. फ्लास्क ऐप कभी-कभी
- 7. कभी-कभी सिग्विन
- 8. कभी-कभी इनटलोडर
- 9. उपयोगकर्ता इंटरैक्शन कभी-कभी UIWebView
- 10. सबसे खूबसूरत तरीका एसक्यूएल सर्वर
- 11. एसक्यूएल सबसे अधिक निष्पादित क्वेरी?
- 12. यूनिट परीक्षण कभी-कभी असफल होते हैं, कभी-कभी
- 13. सॉकेट त्रुटि - कभी-कभी?
- 14. सी ++ कभी-कभी
- 15. * कभी-कभी * डेल्फी
- 16. जावास्क्रिप्ट कभी-कभी IE8
- 17. कभी-कभी एचटीएमएल वीडियो
- 18. हम कभी-कभी जावा
- 19. लाटेक्स कभी-कभी
- 20. Capybara click_link कभी-कभी
- 21. एंड्रॉइड SoundPool.play() कभी-कभी
- 22. DoDragDrop कभी कभी
- 23. एक जावास्क्रिप्ट प्रयास करने की संभावना है जो एक संभावित कभी-कभी त्रुटि खराब व्यवहार को अनदेखा कर रहा है?
- 24. PHP मरम्मत खराब पाठ
- 25. बाल्टी सॉर्ट के लिए सबसे खराब केस जटिलता क्या है?
- 26. नियमित अभिव्यक्तियों के लिए सबसे खराब केस विश्लेषण
- 27. क्या JVM का सबसे खराब केस कार्यान्वयन है?
- 28. SQL सर्वर 2008 में सबसे खराब प्रदर्शन क्वेरी कैसे खोजें?
- 29. SHA1Managed.ComputeHash कभी कभी अलग सर्वर
- 30. आप कभी मिले सबसे दिलचस्प डिजाइन पैटर्न क्या है?
शायद यह एक समुदाय बनाना चाहते हैं WIKI अन्य कोई इसे बंद कर देगा। – JaredPar
वह निश्चित रूप से अपने प्रश्न को विकी बनाने के लिए पर्याप्त प्रतिनिधि है। इसे विकीकृत करें। – ctacke
विकी के रूप में पुनः प्रयास करें। – NotMe