INDICE NO MYSQL

GUSTAVOCANALLI 07/10/2010 16:41:12
#354660
BOA TARDE. TENHO A SEGUINTE ESTRUTURA DE TABELAS NO MYSQL:

--TABELA ALUNO
CREATE TABLE 'mdl_user' (
'id' bigint(10) unsigned NOT NULL AUTO_INCREMENT,
'firstname' varchar(100) NOT NULL DEFAULT [ô][ô],
'phone1' varchar(20) NOT NULL DEFAULT [ô][ô],
'phone2' varchar(20) NOT NULL DEFAULT [ô][ô],
'address' varchar(70) NOT NULL DEFAULT [ô][ô],
'city' varchar(20) NOT NULL DEFAULT [ô][ô],
'country' varchar(2) NOT NULL DEFAULT [ô][ô],
PRIMARY KEY ('id'),
UNIQUE KEY 'mdl_user_mneuse_uix' ('mnethostid','username'),
KEY 'mdl_user_del_ix' ('deleted'),
KEY 'mdl_user_con_ix' ('confirmed'),
KEY 'mdl_user_fir_ix' ('firstname'),
KEY 'mdl_user_las_ix' ('lastname'),
KEY 'mdl_user_cit_ix' ('city'),
KEY 'mdl_user_cou_ix' ('country'),
KEY 'mdl_user_idn_ix' ('idnumber')
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=[ô]One record for each person[ô] AUTO_INCREMENT=33 ;

--TABELA CURSO
CREATE TABLE 'mdl_course' (
'id' bigint(10) unsigned NOT NULL AUTO_INCREMENT,
'fullname' varchar(254) NOT NULL DEFAULT [ô][ô],
'idnumber' varchar(100) NOT NULL DEFAULT [ô][ô],
PRIMARY KEY ('id'),
KEY 'mdl_cour_idn_ix' ('idnumber'),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=[ô]Central course table[ô] AUTO_INCREMENT=7 ;

--TABELA CONTEXT (INSTANCEID é O CODIGO DO CURSO DA TABELA MDL_COURSE)
CREATE TABLE 'mdl_context' (
'id' bigint(10) unsigned NOT NULL AUTO_INCREMENT,
'contextlevel' bigint(10) unsigned NOT NULL DEFAULT [ô]0[ô],
'instanceid' bigint(10) unsigned NOT NULL DEFAULT [ô]0[ô],
'path' varchar(255) DEFAULT NULL,
'depth' tinyint(2) unsigned NOT NULL DEFAULT [ô]0[ô],
PRIMARY KEY ('id'),
UNIQUE KEY 'mdl_cont_conins_uix' ('contextlevel','instanceid'),
KEY 'mdl_cont_ins_ix' ('instanceid'),
KEY 'mdl_cont_pat_ix' ('path')
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=[ô]one of these must be set[ô] AUTO_INCREMENT=66 ;

--TABELA DE RELECAO ENTRE O ALUNO E O CURSO
CREATE TABLE 'mdl_role_assignments' (
'id' bigint(10) unsigned NOT NULL AUTO_INCREMENT,
'roleid' bigint(10) unsigned NOT NULL DEFAULT [ô]0[ô],
'contextid' bigint(10) unsigned NOT NULL DEFAULT [ô]0[ô],
'userid' bigint(10) unsigned NOT NULL DEFAULT [ô]0[ô],
PRIMARY KEY ('id'),
UNIQUE KEY 'mdl_roleassi_conroluse_uix' ('contextid','roleid','userid'),
KEY 'mdl_roleassi_rol_ix' ('roleid'),
KEY 'mdl_roleassi_con_ix' ('contextid'),
KEY 'mdl_roleassi_use_ix' ('userid')
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=[ô]assigning roles to different context[ô] AUTO_INCREMENT=41 ;

A TABELA MDL_USER TEM 400000 REGISTROS.
A TABELA CURSO TEM 4 REGISTROS.
CADA ALUNO ESTÁ MATRICULADO EM UM CURSO.

O SELECT FAZ O SEUINTE: TRAZ 1 LINHA PARA CADA USUÁRIO. ONDE MOSTRA O ID, NOME, ENDERECO E O NOME DO CURSO QUE ESTÁ MATRICULADO.

SEGUE ABAIXO O SELECT:

SELECT ALUNO.ID AS [ô]ID ALUNO[ô],
ALUNO.FIRSTNAME AS [ô]NOME DO ALUNO[ô],
ALUNO.PHONE1 AS [ô]TELEONE RES.[ô],
ALUNO.PHONE2 AS [ô]TELEONE CEL.[ô],
ALUNO.ADDRESS AS [ô]ENDEREÇO[ô],
ALUNO.CITY AS [ô]CIDADE[ô],
ALUNO.COUNTRY AS [ô]PAÍS[ô],
CURSO.ID AS [ô]ID CURSO[ô],
CURSO.FULLNAME AS [ô]NOME DO CURSO[ô]
FROM
MDL_USER ALUNO,
MDL_COURSE CURSO,
MDL_CONTEXT CONTEXT,
MDL_ROLE_ASSIGNMENTS ITEMCURSO
WHERE
ALUNO.ID = ITEMCURSO.USERID AND
ITEMCURSO.CONTEXTID = CONTEXT.ID AND
CONTEXT.INSTANCEID = CURSO.ID;

COMO EU PODERIA AUMENTAR A PERFORMANCE DA CONSULTA UTILIZANDO ÍNDICES?

OBS: EM UM OUTRO TÓPICO ME ENCAMINHARAM DOIS LINKS DO SQL MAGAZINE. PORéM NÃO TENHO ACESSO PARA VISUALIZÁ-LOS.
SEGUE ABAIXO OS LINKS:

http://www.devmedia.com.br/articles/post-6178-Artigo-SQL-Magazine-25-Otimizacao-de-consultas-no-MySQL.html
http://www.devmedia.com.br/articles/viewcomp.asp?comp=6148&hl=
GUSTAVOCANALLI 18/10/2010 13:01:34
#355361
CONSEGUE ATRAVéS DE ÍNDICES CRIADOS NAS CHAVES PRIMARIAS E ESTRANGEIRAS DE CADA TABELA DIMINUIR CERCA DE 20% NO TEMPO DE EXECUÇÃO DA QUERY.
ESSE RESULTADO ESTÁ BOM OU TEM QUE DIMINUIR AINDA MAIS?
Tópico encerrado , respostas não são mais permitidas