2010-06-29 3 views
0

이전에 질문을 받았지만 찾을 수없는 것 같습니다.MySQL 내보내기 색인

나는 지속적으로 개발중인 CMS를 가지고 있습니다. CMS를 사용하여 여러 웹 사이트를 구축 했으므로 수많은 데이터베이스가 존재합니다.

개발 DB에서 인덱스를 추출하여 프로덕션 DB에 적용하려고합니다. 인덱스를 SQL로 추출하는 쉬운 방법이 있습니까? 의 라인을 따라

뭔가 :

create index idx1 on one (lft, rght); 
create index idx1 on two (alias); 
create index acos_idx3 on three (model, related_id); 
+0

당신이 당신이 무엇을 원하는 것을 확실합니까? 인덱스는 대개 데이터가 추가 될 때 즉시 생성됩니다. 그것들은 테이블의 데이터와 강하게 묶여 있기 때문에 할 수 있다고해도 한 DB에서 다른 DB로 인덱스를 복사하는 용도는 무엇인지 알 수 없습니다. – Mike

+0

인덱스 데이터를 추출하는 것이 아니라 인덱스 정의를 추출하는 것입니다. 예를 들어, mysqldump --no-data는 인덱스 명령문을 포함한 모든 명령문을 내 보냅니다. 내 컴퓨터에 PowerDesigner가 설치되어 있으므로 색인을 검색 할 수있는 다른 방법이 있습니다. – pascal

+0

@Mike : 예제 출력을 보려면 편집 된 질문을 참조하십시오. – Leo

답변

1

INFORMATION_SCHEMA 데이터베이스에서 색인을 추출한 다음 다른 데이터베이스에 색인을 추가 할 수는 있지만 매우 쉽지는 않습니다. 이를 이미 없으면

이 (배포에 사용되는 저장 프로 시저의 코드) 당신에게 예를 제공하기 위해, 이것은 고유 키를 추가

if not exists (select * from information_schema.KEY_COLUMN_USAGE 
       where table_schema = 'database_name' 
       and table_name='your_table' 
       and constraint_name ='key_name') 
then 
    alter table your_table add unique key `key_name` ('column_name'); 
end if; 

당신은 기본적으로 당신이 INFORMATION_SCHEMA에 필요한 무엇이든 찾을 수 있습니다. 나는이 모든 색인을 동적으로 검사하는 코드를 작성할 수 있다고 믿지만, 쉬운 지 확실하지 않습니다.

UPDATE : 당신이 MaasSql의 대답에서 제공하는 링크에서 볼 수

또한, show index from database.table를 사용할 수 있습니다. 그런 다음 결과를 반복하고 데이터베이스에없는 경우 각 색인을 추가하십시오.

또는 당신이 시도 할 수 있습니다 :

if not exists (select * from information_schema.STATISTICS 
where table_schema = 'database_name' 
and table_name='table_name' 
and index_name ='key_name') 
then 
... 
end if; 
+0

이것은 제가 찾고있는 종류의 것이지만 기발하게도 모든 색인이 나열되어 있지는 않습니다! – Leo

+0

나는 다른 모습을 보았고 나의 대답을 업데이트했다. – ceteras

1

나는 내 SQL과 훨씬 작동하지 않지만, 내가 기억으로, 백업 오픈 텍스트 DDL 문이었다. 모든 백업이 시작될 때 모든 테이블이 포함 된 다음 모든 인덱스가 포함될 것입니다.

테이블 루핑 비트가있는이 명령을 사용하면 원하는 결과를 얻을 수 있습니다. My SQL 5.0 Reference Manual.

좋은 LUCK!

+0

좋은 찾기, 나는 "show index from"에 대해 몰랐습니다. – ceteras

0

글쎄, 나는 다른 뭔가로 이동했고 내가 가진 이것은까지입니다 (Ceteras 자신의 업데이 트를 발표하기 직전!). 현재 문제는 존재하지 않는 CREATE INDEX가 유효하지 않으므로 다른 방법을 찾아야한다는 것입니다. 이번 주말에 이것에 대해 다시 생각해 볼 수 있습니다.

$query="SHOW TABLES"; 
$result = mysql_query($query); 
while($row = mysql_fetch_array($result)) 
{ 
    $idxQ = "SHOW INDEXES FROM {$row[0]} IN $database;"; 
    $idxR = mysql_query($idxQ); 

    while($idxRow = mysql_fetch_object($idxR)) 
    { 
     //basic query: CREATE INDEX indexName ON tableName (columnName); 
     $indexName = $idxRow->Key_name; 
     if($indexName=='PRIMARY') continue; 
     $tableName = $idxRow->Table; 
     $columnName = $idxRow->Column_name; 
     $idxCreateQ = "CREATE INDEX IF NOT EXISTS $indexName ON $tableName ($columnName);"; 
     echo $idxCreateQ; 
    } 

}