Hi,
I was measuring performance after 5 times. Now I have run more than 100
times and  var queryRes = query.ToList(); taken 202 milliseconds as minimum.
Will be appreciated if I get a solution for getting the result in 10 - 50
milliseconds.

Regards,
Charlin



On Thu, 14 Nov 2024 at 15:35, Pavel Tupitsyn <ptupit...@apache.org> wrote:

> How do you measure? Do you perform a warm up before measurement?
> Try running the query 100 times before the measurement. Or, ideally, use
> BenchmarkDotNet to get accurate results.
>
> On Thu, Nov 14, 2024 at 11:51 AM Charlin S <charli...@hotelhub.com> wrote:
>
>> Hi,
>> Thank you for your response.and sample.
>> My cache instance was created as TestIcache=_ignite.GetOrCreateCache<
>> string, TestModel>("TestModel"); so index was not applied.
>> now I am creating cache instance like below and index applied
>>   var cacheCfgTestModel = new CacheConfiguration("TestModel", new
>> QueryEntity(typeof(TestModel)));
>>          TestIcache=_ignite.GetOrCreateCache<string, TestModel>(
>> cacheCfgTestModel);
>>
>> SQL:
>> select _T0._KEY, _T0._VAL from "TestModel".TESTMODEL as _T0 where
>> (_T0.COUNTRYCODE IS NOT DISTINCT FROM ?)
>>
>> EXPLANATION:
>> SELECT
>>     _T0__Z0._KEY AS __C0_0,
>>     _T0__Z0._VAL AS __C0_1
>> FROM "TestModel".TESTMODEL _T0__Z0
>>     /* "TestModel".TESTMODEL_COUNTRYCODE_ASC_IDX: COUNTRYCODE IS ?1 */
>> WHERE _T0__Z0.COUNTRYCODE IS ?1
>> SELECT
>>     __C0_0 AS _KEY,
>>     __C0_1 AS _VAL
>> FROM PUBLIC.__T0
>>     /* "TestModel"."merge_scan" */
>>
>> Total records:27713 = > 27713
>> Time taken for Query:2 milliseconds ->  var query = TestIcache.
>> AsCacheQueryable().Where(x => x.Value.CountryCode == CountryCode); Time
>> taken for QueryResult:313 milliseconds -> var queryRes = query.ToList();
>> Total Time taken:316 milliseconds
>> Why var queryRes = query.ToList(); taking 313 milliseconds even if the
>> result having only one record is taking nearly 300 milliseconds.
>>
>> Regards,
>> Charlin
>>
>>
>>
>> On Wed, 13 Nov 2024 at 22:36, Pavel Tupitsyn <ptupit...@apache.org>
>> wrote:
>>
>>> - This shows a full scan, the index is not being used.
>>> - There is no parametrization, I'm not sure why. Which Ignite version do
>>> you use?
>>>
>>> I've prepared a simple proof of concept [1] which shows that an index is
>>> used in this situation. Generated SQL is different:
>>>
>>> >> SQL:
>>> select _T0._KEY, _T0._VAL from "c".TESTMODEL as _T0 where
>>> (_T0.COUNTRYCODE IS NOT DISTINCT FROM ?)
>>>
>>> >> EXPLAIN:
>>> SELECT
>>>     _T0__Z0._KEY AS __C0_0,
>>>     _T0__Z0._VAL AS __C0_1
>>> FROM "c".TESTMODEL _T0__Z0
>>>     /* "c".TESTMODEL_COUNTRYCODE_ASC_IDX: COUNTRYCODE IS ?1 */
>>> WHERE _T0__Z0.COUNTRYCODE IS ?1
>>> SELECT
>>>     __C0_0 AS _KEY,
>>>     __C0_1 AS _VAL
>>> FROM PUBLIC.__T0
>>>     /* "c"."merge_scan" */
>>>
>>> [1] https://gist.github.com/ptupitsyn/882b9b9e5e13c82fcf96f83fd53b2777
>>>
>>>
>>>
>>> On Wed, Nov 13, 2024 at 6:41 PM Charlin S <charli...@hotelhub.com>
>>> wrote:
>>>
>>>> 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
>>>>>>>>>>
>>>>>>>>>>

Reply via email to