Hi, 1. Use "==" instead of "string.Equals", looks like the provider does not like string.Equals. changed to == 2. Share the generated SQL
SELECT Field1,Field2 FROM TestModel WHERE COUNTRYCODE='AU' 3. Share the result of EXPLAIN for that SQL plan=SELECT __Z0.FIELD1 AS __C0_0, __Z0.FIELD2 AS __C0_1 FROM "TestModel".TESTMODEL __Z0 /* "TestModel".TESTMODEL.__SCAN_ */ /* scanCount: 1681786 */ WHERE (__Z0.COUNTRYCODE = 'AU') 4. Is there an index on CountryCode? Yes, [QuerySqlField(IsIndexed = true)] public string CountryCode { get; set; } Thanks, Charlin On Wed, 13 Nov 2024 at 15:06, Pavel Tupitsyn <ptupit...@apache.org> wrote: > 1. Use "==" instead of "string.Equals", looks like the provider does not > like string.Equals > 2. Share the generated SQL > 3. Share the result of EXPLAIN for that SQL > 4. Is there an index on CountryCode? > > On Wed, Nov 13, 2024 at 9:16 AM Charlin S <charli...@hotelhub.com> wrote: > >> Hi, >> Thanks for your response. >> I have tried different ways but the result is the same. >> my cache records count is above 160,0000 >> var watchLINQQuery = System.Diagnostics.Stopwatch.StartNew(); >> var tmp= TestIcache.AsEnumerable().Where(tc=> string.Equals(tc. >> Value.CountryCode, CountryCode)).Select(tc => tc.Value); >> watchLINQQuery.Stop(); //0 or 1 Milliseconds >> var watchIQueryableToArray = System.Diagnostics.Stopwatch.StartNew(); >> >> var result = tmp.ToArray(); // 12354 milliseconds taken >> watchIQueryableToArray.Stop(); >> >> var result = tmp.ToArray(); taking similar time even if my query result >> returns 1 or 2 records. Please suggest to me how to improve this query >> performance. >> Regards, >> Charlin >> >> >> On Tue, 5 Nov 2024 at 19:01, Pavel Tupitsyn <ptupit...@apache.org> wrote: >> >>> 1. Check the generated SQL >>> >>> // Cast to ICacheQueryable >>> var cacheQueryable = (ICacheQueryable) query; >>> >>> // Get resulting fields query >>> SqlFieldsQuery fieldsQuery = cacheQueryable.GetFieldsQuery(); >>> >>> // Examine generated SQL >>> Console.WriteLine(fieldsQuery.Sql); >>> >>> >>> 2. Try EXPLAIN and other suggestions from >>> https://ignite.apache.org/docs/latest/SQL/sql-tuning >>> >>> 3. Is there an index on CountryCode? >>> >>> 4. Case-insensitive comparison might be inefficient. A better approach >>> is to store lower/uppercase value in cache, and then using lower/upper >>> criteria for search >>> >>> On Tue, Nov 5, 2024 at 1:08 PM Charlin S <charli...@hotelhub.com> wrote: >>> >>>> Hi Pavel, >>>> Thanks for your email. it reduces to 9 seconds after removing >>>> AsParallel. Please let me know if there are any more options to get good >>>> performance. >>>> >>>> Regards, >>>> Charlin >>>> >>>> On Tue, 5 Nov 2024 at 13:31, Pavel Tupitsyn <ptupit...@apache.org> >>>> wrote: >>>> >>>>> Hi, "AsParallel" is the problem, it causes the entire data set to be >>>>> loaded locally before filtering. >>>>> >>>>> Remove it so that the LINQ expression can be translated into Ignite >>>>> SQL and executed more efficiently. >>>>> >>>>> https://ignite.apache.org/docs/latest/net-specific/net-linq >>>>> >>>>> On Tue, Nov 5, 2024 at 8:58 AM Charlin S <charli...@hotelhub.com> >>>>> wrote: >>>>> >>>>>> Hi All, >>>>>> >>>>>> I am trying Ignit.Net LINQ for the first time and seeing very >>>>>> slowness with my linq query taking 13-15 seconds. Test model having >>>>>> 550,000 >>>>>> records >>>>>> my query as below >>>>>> TestModel having index for CountryCode field. >>>>>> ICache<string, TestModel> cache = ignite.GetCache<string, >>>>>> TestModel>(CacheName); >>>>>> IQueryable<ICacheEntry<string, TestModel>> igniteQuerable = >>>>>> cache.AsCacheQueryable(); >>>>>> igniteQuerable.AsParallel() >>>>>> .Where(x=>string.Equals(x.Value.CountryCode, criteria. >>>>>> CountryCode, StringComparison.CurrentCultureIgnoreCase)) >>>>>> .Select(x => x.Key).ToList(); >>>>>> >>>>>> >>>>>> Regards, >>>>>> Charlin >>>>>> >>>>>>