24.09.2012 23:04, Howard Chu пишет: > Roman Rybalko wrote: >> 24.09.2012 22:23, Howard Chu пишет: >>>> (&(logTime>=201209201440+0400)(logTime<=201209201450+0400)) - 57sec >>>> (|(logTime=20120920144001+0400)(logTime=20120920144008+0400)) - >>>> 0.03sec >>> Use a correct filter. Your clauses above use invalid syntax. >> Point me please, where exactly my syntax is invalid? > > You must be blind. You wrote: > > (&(logTime>=201209201440+0400)(logTime<=201209201450+0400)) - 57sec > > Check the proper format of a GeneralizedTime value. You have omitted > the seconds field, so you're effectively looking for every entry > greater than the year 20, December 09. The index lookup for this will > most likely hit every entry in your DB, which is why it takes 57 seconds. Many thanks for suggestion. Apologies for my extra curiosity.
I tried full GeneralizedTime format (with seconds, with fractions) but the search works also slow. Even the search (|(logTime=20120920144001+0400)(logTime=20120920144008+0400)) that works less than second and returns 2 entries, when reformatted as (&(logTime>=20120920144001+0400)(logTime<=20120920144008+0400)) works more than 50 seconds. According to RFC4517 ( http://tools.ietf.org/html/rfc4517#section-3.3.13), GeneraalizedTime has the syntax: GeneralizedTime = century year month day hour [ minute [ second / leap-second ] ] [ fraction ] g-time-zone which means that minutes and seconds may be omitted. Probably that's not implemented... no problem. openldap version 2.4.23 How may I optimize (&(>=)(<=)) searches? -- WBR, Roman Rybalko