Hi creating all combination of index is not good solution maybe my tracker request will be good for you if yes vote on it http://tracker.firebirdsql.org/browse/CORE-2795
but in your scenario will be good also shardering simple way for simple shardering solution will be divide data between tables Region 1 , Region 2 ... Karol Bieniaszewski --- In firebird-support@yahoogroups.com, Vander Clock Stephane <svanderclock@...> wrote: > > > > > For this i setup my location ID as a string like this : > > > > > > for US > NEW YORK(State) > NEW YORK(City) the id will be > > > US-0001234-0001245 > > > > > > for US > NEW YORK(State) > NEW YORK(City) > Manhattan the id will be > > > US-0001234-0001245--0001298 > > > > Stupid question, maybe, but why not use postal codes? - they're predefined > > and denser. At least in the US, codes tend to be well-localized, meaning > > that 02139 is adjacent to 02138 and both are in Cambridge Mass. > > > > it's not postcode but just geographical ID > every location have a unique integer ID > and we add secondary string ID based on the id of their parent > > Manhattan iD is 0001298 (integer) > manhattan secondary ID is US-0001234-0001245--0001298 (string) > > > > > > > > now in my query if an user want to see all the property in manhattan i > > > simply do > > > Where Location like 'US-0001234-0001245--0001298%'; > > > > > > > OK. This query has one of two problems. The more likely is that you're > > not using parameterized queries. Parameterized queries are queries where > > you prepare the query without the input values then execute sending just > > the values. That saves the cost of parsing, compiling, and optimizing the > > query over and over again. > > > > yes but i think this is negligeable no ? > > > > > > The second, and less likely, is that you're using LIKE with a parameter, > > which means that the condition can't use an index because the parameter > > could start with a '%'. Instead of LIKE use STARTING WITH (or is it > > STARTS WITH?). > > > > it's always STARTNG WITH > > > > > > > and for query like > > > > > > where Location like 'US%' and nb_bedroom > 2 and nb_bedroom < 3 > > > > > > i m in trouble because of the "like" i can not use the multiple column > > > index on (LOCATION, NB_BEDROOM) ... > > > i can use only the single column index on location + single column > > index > > > on nb_bedroom (and believe me speed is not the same) > > > > Right. But you could use an index on (NB_BEDROOM, LOCATION), if > > you were prepared to build the query as NB_BEDROOM = x and LOCATION > > starting with y OR NB_BEDROOM = x+1 and .... > > > > yes but unfortunatly it's can work with nb bedroom but it's will not work > with fields like price or surface for exemple because the delta min vs > max is much > more bigger :( > > > > > > > > so for this i simply "duplicate" the row in the datase! > > > > > > > Arrggg!!! It's well known that if you've got two copies of the same > > data, at least one is wrong. Having four copies of every piece of data > > is ... well, not generally considered good design. > > > > i know, i know ... but except "denormalyzing" the database i don't see > any solution to my probleme :( > > > > How about having separate fields with each part of the location, so if > > you know you're > > looking for a specific block in Manhattan, you look for > > > > LOCATION_COUNTRY = 'US' and > > LOCATION_CITY = <n> and > > LOCATION_ARRONDISMENT = <m> and > > LOCATION_CARRE = <q> > > > > If you need less detail, ask for fewer fields. You'd have more > > indexes, but if the read load is substantially heavier than the update > > load - which I'd guess it is by 100:1 or more - then more indexes > > aren't that much of a problem. > > > > i actually think about this, but dedpendly of the country sometime their > is more than 10 level ! > ex: United States > Alaska > Aleutian Islands > Aleutian Islands > Fox > Islands > Krenitzin Islands > Akutan Island > Akutan > > so i will need to add at least all this field : > > location_level1 (country) > location_level2 > location_level3 > location_level4 > location_level5 > location_level6 > location_level7 > location_level8 > location_level9 > location_level10 > > but this will not help my query like > > where > location_level3 = 0023954 and > Price > 100000 and > price < 200000 > order by > location_level3, CREATION_date > > with index to use ?? multi column index on > (location_level3, Price) OR > (location_level3, Creation_date) ? > > that ok, i have actually the same probleme in my design > but here i will need also to create too much of index to answer all the > possible case ! > > (location_level1, Price) > (location_level1, Creation_date) > (location_level2, Price) > (location_level2, Creation_date) > ... > (location_level10, Price) > (location_level10, Creation_date) > > > in my design where i duplicate the row i can have query like > > where > location = 0023954 and > Price > 100000 and > price < 200000 > order by > CREATION_date > > and only need to create index like > > (location, Price) > (location, Creation_date) > > > [Non-text portions of this message have been removed] >