Take a look at this scenario, I have two characters, one shoots two bullets on the direction of the other character, the bullets are fired instantly and travel at infinity speed, how to detect a collision?
Here’s an image to illustrate the problem:

The red bullet would clearly miss, but the green bullet would hit, how to perform this kind of collision test?
This type of collision test is called ray casting. Its implementations can vary from simple to very complex, depending on your specific application and how much time you’re willing to invest into performance gains. Definitely search online for the topic if you’re interested, or pick up a game programming book. It’s a common operation for 3d games.
If you know that there will only ever be 2 bullets, then you can solve this with just a distance check between the ray created by the fired bullet and the other bullet. If the distance is less than the summed radius of the bullets then you know they’ve hit.
If you’re making some sort of game engine where many bullets will be moving, then the simplest way that I can think of accomplishing this is to move the bullet along the ray that it is fired from (by normalizing the bullet’s movement vector) in small increments (no larger than the bullet’s radius) and perform collision checks at each step.
No matter what ray casting method you end up using, it will be tightly integrated with whatever system you’re using for spacial partitioning. There’s no way to avoid querying many spacial locations when you’re ray casting, so be sure that you use an effective space partitioning system for your purposes.