Nie pokazujesz struktury klucza, ale pokazuje, że site_id jest częścią klucza wieloczęściowego (MUL ). zauważ, że jeśli nie jest to PIERWSZE pole w tym wieloczęściowym kluczu, to klucz nie może być użyty w klauzuli where. np. jeśli masz
KEY somekey (field1, site_id, field3, ...)
to twoja klauzula where musi zawierać OBA field i site_id aby ten klucz mógł być użyty w zapytaniu. Nie musisz używać pól w tej samej kolejności, w jakiej są one wymienione w kluczu (where site_id=.. and field1=... będzie działać tak samo jak where field1=... and site_id=... ), ale ponieważ pole 1 pojawia się przed site_id w definicji klucza, musisz go również użyć, aby cały klucz był użyteczny.
To samo dotyczy twojego q pole. Musi również znajdować się na pierwszym miejscu w zakrytych kluczach, w przeciwnym razie te klucze będą bezużyteczne.