2011-09-19 3 views
0

원시 SQL을 작성한 이후로 얼마 동안이 SQL 쿼리를 최적화 할 수 있기를 바랍니다. MySQL과 PostgreSQL 모두에서 작동합니다.어떻게 원시 SQL을 최적화하고 CodeIgniter를 통해 구현할 수 있습니까?

나는 또한 ActiveRecord, 어떤 도움/조언을 사용하여 CodeIgniter (2.x)를 통해 이것을 구현해야합니까?

 SELECT * 
    FROM notaries, contact_notaries 
    WHERE notaries.id = contact_notaries.notary_id 
AND WHERE ( contact_notaries.city LIKE %$criteria% 
      OR contact_notaries.state LIKE %$criteria 
      OR contact_notaries.address LIKE %$criteria%) 

고마워요!

답변

0
  1. 각 쿼리는 그것은 JOIN보다는 WHERE에 조인 조건을 넣어 훨씬 낫다 (두 번째 필요하지 않습니다)
  2. WHERE 절을 할 수 있습니다.
  3. 2 개의 테이블 (*)의 모든 열이 정말로 필요합니까?
    그래서 a1ex07의 쿼리를 사용

SELECT [field_list]
FROM notaries
INNER JOIN contact_notaries ON (notaries.id = contact_notaries.notary_id)
WHERE (contact_notaries.city LIKE '%$criteria%'
OR contact_notaries.state LIKE '%$criteria'
OR contact_notaries.address LIKE '%$criteria%')

0

에 리팩토링 것 :

SELECT [field_list] 
FROM notaries 
INNER JOIN contact_notaries ON (notaries.id = contact_notaries.notary_id) 
WHERE (contact_notaries.city LIKE '%$criteria%' 
OR contact_notaries.state LIKE '%$criteria' 
OR contact_notaries.address LIKE '%$criteria%') 

활동 기록 :

$this->db->select(); // Leave empty to select all fields 
$this->db->join('contact_notaries', 'notaries.id = contact_notaries.notary_id', 'inner'); 
$this->db->like('contact_notaries.city', 'criteria'); 
$this->db->like('contact_notaries.state', 'criteria'); 
$this->db->like('contact_notaries.address', 'match'); 
$results = $this->db->get('notaries'); 

당신이 할 수있는 필드의 목록을 지정하려면 $this->db->select('field_1, field_2, ...');.

http://codeigniter.com/user_guide/database/active_record.html

관련 문제