what is the best technique to detect a given signal : energy detection, autocorrelation, and matched filter based sensing, CRC?
There is no best rule, it depends on what we know about the signal.

Energy Detector: The energy Detector makes a decision on presence or absence of a signal based on sum of squared samples. This rule comes from the fact that the signal to be detected is inherently assumed to be random following a wide sense stationary process with a known PDF, the likelihood ratio test then simply determines this rule.

Matched filtering and autocorrelation: The matched filtering is nothing but the correlation of the. Received samples with the known signal itslef, so they are inherently the same, the difference compared to energy Detector is that here the signal is assumed to be a known deterministic quantity. The matched filter is the optimal detector in low SINR scenarios.

CRC data: A check on CRC is an agreement between the receiver and tarsmitter in whether an error has occurred or not while transmitting data on a wired/optical/Wireless channels. By itself it is not a signal detection scheme. It only detects whether an error has occurred or not. Once an error is detected the receiver can then request the trasnmitter to send the data again by sending a NACK (not acknowledge) signal to the trasnmitter (there are other ways to handle it as well, like soft combining etc.)