Virtual Interface Issue !?!?

When I use as below… it doesn’t work.

modeul mem_top;
...
	// start the test
	initial begin
		uvm_config_db#(virtual mem_if)::set(null, "mem_top", "memif", memif);
		run_test();
		//#1000 $finish;
	end
...
endmodule

This too doesn’t work.

modeul mem_top;
...
	// start the test
	initial begin
		uvm_config_db#(virtual mem_if)::set(uvm_root::get(), "mem_top", "memif", memif);
		run_test();
		//#1000 $finish;
	end
...
endmodule

When I use as below, it works… explain me why do we need to use wild matching “*”?
Confused with config databaase… how this matching works??

modeul mem_top;
...
	// start the test
	initial begin
		uvm_config_db#(virtual mem_if)::set(uvm_root::get(), "*", "memif", memif);
		run_test();
		//#1000 $finish;
	end
...
endmodule

John