के साथ SQLiteParameter का उपयोग कर मुझे SQLiteParameters और LIKE ऑपरेटर का उपयोग SQLite क्वेरी में कोई समस्या है। यहां कोड का एक स्निपेट है, और अगर मेरे पास पर्याप्त कोड नहीं है तो मैं क्षमा चाहता हूं। यदि ऐसा है, तो मैं आसानी से और पोस्ट कर सकता हूं।SQLite.NET प्रदर्शन LIKE ऑपरेटर
गरीब प्रदर्शन:
using (OdysseyDataContext entities = new OdysseyDataContext())
{
var results = entities.SearchResults.SqlQuery(
"SELECT * FROM SearchResults WHERE ContactName LIKE @ContactName",
new SQLiteParameter("@ContactName", "test")
);
}
महान प्रदर्शन:
using (OdysseyDataContext entities = new OdysseyDataContext())
{
var results = entities.SearchResults.SqlQuery(
string.Format(
"SELECT * FROM SearchResults WHERE ContactName LIKE '{0}'",
"test"
)
);
}
अन्य महत्वपूर्ण कोड:
public class OdysseyDataContext : DbContext
{
public DbSet<SearchResult> SearchResults { get; set; }
}
public class SearchResult
{
[Key]
public Guid Id { get; set; }
public string ContactName { get; set; }
}
पहला उदाहरण निष्पादित करने के लिए 700 एमएस लेता है, जो अपने पर्यवेक्षक अस्वीकार्य पाता है। दूसरा उदाहरण निष्पादित करने के लिए 7 एमएस लगता है। अंतर क्यों? क्या मुझे कुछ नौसिखिया स्थिति कमाने के लिए पूरी तरह से गलत कर रहा है?
अग्रिम धन्यवाद!
क्या आप कैशिंग कलाकृतियों को खत्म करने के लिए कई परीक्षण चला रहे हैं? क्या वे दोनों एक ही पंक्तियों को वापस करते हैं? क्या आप वाइल्डकार्ड का उपयोग कर रहे हैं? – Tim
इसके अलावा, SQLite के कार्यान्वयन में जहां LIKE फ़ंक्शन ओवरराइड किया गया है, अनुक्रमणिका अनुपलब्ध हैं। आप किसके साथ मिलते हैं ... जहां संपर्क नाम GLOB @contactname [केस संवेदनशील, बीटीडब्लू]? – Tim
हाय टिम। हाँ, मैं कई परीक्षण चला रहा हूँ। पहली बार 1 सेकंड से थोड़ा अधिक और 15 से अधिक परीक्षण औसत 700 एमएस है। हां, वे एक ही पंक्तियों को वापस करते हैं।नहीं, मैं किसी भी जंगली कार्ड का उपयोग नहीं कर रहा हूँ। मुझे पता है कि यह अजीब लगता है, लेकिन मैं केस संवेदनशील खोज को हटाने के लिए इस तरह के कथन का उपयोग कर रहा हूं ताकि यह ContactName COLOTATE NOCASE पर मेरे इंडेक्स सेटअप का उपयोग करेगा। – Terry