Different way to do a LIKE WHERE condition?
Two things you can do:


Use SendTime &gt;= '20140101' AND SendTime &lt; '20150101' instead of the year(SendTime)= 2014. This makes the condition sargable and indexes can be used.
Add a composite index on (SendTime, MessageType) so the query does not have to do a full table scan but only a (partial) index scan.


The query rewritten:

SELECT  
    month_date = month(SendTime),
    year_date = year(SendTime),
    MessageType,
    message_count = COUNT(MessageType) 
FROM Message
WHERE SendTime &gt;= '20140101' AND SendTime &lt; '20150101'
  AND MessageType NOT LIKE '%test%' 
  AND MessageType NOT LIKE '%ANOTHER THING%' 
  AND messagetype NOT LIKE '%STUFF%' 
GROUP BY year(SendTime), month(SendTime), MessageType ;




Another option would be to add computed columns on year(SendTime) and month(SendTime) and an index on year(SendTime), month(SendTime), MessageType - and keep the original query!