We have search capabilities in our web application which I am trying to improve the performance of. One aspect of the search (which we call "simple") allows the user to enter one or more words and only resources containing ALL of the words are returned. The requirements state that the search must be a wild-card search, returning results containing words starting with each of the entered search terms in any order. ie, If the criteria entered is 'John McDonald', then valid matches would be 'John McDonald', 'John Q McDonald', 'McDonald, John', 'McDonald, Smith and Johnson', but 'LongJohn McDonald' would not be a valid match. The snippit of code being used at the moment is something along the lines of: WHERE (R.Description LIKE '%[^a-zA-Z]John%' OR R.Description LIKE 'John%') AND (R.Description LIKE '%[^a-zA-Z]McDonald%' OR R.Description LIKE 'McDonald%') The [^a-zA-Z] is needed to ensure that the search term is at the start of a word (ignoring for the moment that the search is broken, and '123John *&^McDonald' would be a valid match), but that also means that the OR part is needed for each term. The performance of this is barely acceptable. Until recently other slow, nasty bits in the search code 'hid' this as a performance issue, but I have been tidying up the code and optimising the cr*p out of it - this is now the slowest part of the whole deal. Any ideas on how to improve the performance here? Please bear in mind that the behaviour now cannot change - the existing code has been in production use for over two years (up to 500 simultaneous users), and changing the search behaviour is going to cause massive re-training and support headaches.