I am having an issue using SQLiteParameters and the LIKE operator in a SQLite query. Here is a snippet of code, and I apologize if I don’t have enough code here. If that is the case, I can easily post more.
Poor Performance:
using (OdysseyDataContext entities = new OdysseyDataContext())
{
var results = entities.SearchResults.SqlQuery(
"SELECT * FROM SearchResults WHERE ContactName LIKE @ContactName",
new SQLiteParameter("@ContactName", "test")
);
}
Great Performance:
using (OdysseyDataContext entities = new OdysseyDataContext())
{
var results = entities.SearchResults.SqlQuery(
string.Format(
"SELECT * FROM SearchResults WHERE ContactName LIKE '{0}'",
"test"
)
);
}
Other important code:
public class OdysseyDataContext : DbContext
{
public DbSet<SearchResult> SearchResults { get; set; }
}
public class SearchResult
{
[Key]
public Guid Id { get; set; }
public string ContactName { get; set; }
}
The first example takes 700 ms to execute, which my supervisor finds unacceptable. The second example takes 7 ms to execute. Why the difference? Is there something I am doing completely wrong to earn me newbie status?
Thanks in advance!
So, I think I may have narrowed it down to an issue with System.Data.SQLite. I tried the following code in C++:
Both the PoorPerformance and GoodPerformance functions yielded 1 ms with 11 rows. Is there something different between what I did and what should have been done by System.Data.SQLite? Hopefully this is just something I can report as a bug with System.Data.SQLite and perhaps apply my own fix.