Why is an index I created not being used in a query execution?
Thanks everyone for your help. I think i've/we've answered the questions.


  Why isn't the optimizer using my covering index? Is it because it thinks it's cheaper to scan the whole table? 


Because the optmizer has to read most rows in table, it's preferring the clustered index.


  I noticed if i change the query to just fetch a.ListingId and not the rest of the columns from a, it uses my index (and the reads/cost seems much lower, due to avoiding the index scan). Should I use this in a subquery then?


No. Optimizer is doing the right thing. Forcing an index hint proves that, when looking at cost difference.


  Why is the query optimizer doing an clustered index scan and not a seek?


See first answer


  This query is the one existing in an index view. When the index view needs to be updated, is this the actual query that runs to update itself? My thinking was yes, which is why I'm trying to optimize it. If the index view update doesn't use this query, then I won't bother?


As requested, I split this out into a different question