use 쿼리 보내서 디비 선택하고, select 할때 선택된 디비 안에 있는 테이블 대상을 쿼리를 날리는데, use DB; select * from TABLE; 이나 select * from DB.TABLE; 이나 결과는 같은데요. 굳이 use DB; 를 할 필요가 있는건가요? 어떤 성능상의 차이가 있는지... 아니면 다른 이유가 있는지... 아시는 분 계시면 답변좀 부탁드립니다.
결론적으로는 별차이 없다가 저의 의견입니다. SQL Parsing 시에 해당 객체의 서버정보를 확인하나 미리 서버정보를 획득한 상태에서 데이터를 읽어오나 차이가 거기서 거기겠네요. 있다고 해도 무시할만한 수준이 아닐까합니다. 단지, 쿼리 패스를 전역적으로 가져가느냐, 지역적으로 가져가는냐의 차이와 네트웍 트래픽 정도의 차이가 아닐까요? 1. USE [DB명]; 선언된 이후의 모든 쿼리에서 참조하는 객체는 특별한 언급이 없는한 [DB명]의 데이터 딕셔너리를 확인 하겠다. => 왠지 프로그램에서 전역 변수를 선언한 느낌이랄까요... 2. SELECT * FROM [DB명].TABLE SQL Parsing Time에 TABLE은 [DB명]의 데이터 딕셔너리에서 확인하겠다. => 이전이나 이후나 어떤 쿼리가 있는지는 모르겠다만 현재 쿼리의 객체는 [DB명]에 있다. 네트웍 트래픽의 차이라고 한다면 쿼리가 아주 많아진다는 가정하에 USE DB명; SELECT * FROM TB1; SELECT * FROM TB2; SELECT * FROM TB3; SELECT * FROM TB4; ... SELECT * FROM TBn; 이것이 SELECT * FROM DB명.TB1; SELECT * FROM DB명.TB2; SELECT * FROM DB명.TB3; SELECT * FROM DB명.TB4; ... SELECT * FROM DB명.TBn; 보다 "DB명." 요 서버명 써주는 것을 덜 써주게 되니까 네트웍에 전송되는 쿼리 스트링 만큼의 바이트 수를 세이브하게 되는 결과가 된다는 것이죠. 물론, 이정도로까지 쓸일은 없을 것이고 이것도 프로시저로 대체하게 되면 그다지 -_-;; 게다가 무시할 정도의 미미한 차이라는 것.... 저의 생각은 그렇습니다.