2015-04-14 2 views
0

У меня есть три таблицы (все упрощено для вопроса)Лучшая производительность, чем двойная SQLite внутреннего соединение

Student 
--- 
StudentId (primary key) 
UniversityId (indexed) 
CityId (indexed) 
StudentName 


University 
--- 
UniversityId (primary key) 
UniversityName 


City 
--- 
CityId (primary key) 
CityName 

Я хочу, чтобы напечатать все имена студентов, но если имена совпадают, я хочу заказать сначала от CityName, откуда они, а затем от UniversityName.

Итак, у меня есть простой запрос, как это:

select s.* from student s 
inner join university u on s.UniversityId = u.UniversityId 
inner join city c on s.CityId = c.CityId 
order by s.StudentName asc, c.CityName asc, u.UniversityName asc 

Есть ли способ улучшить производительность этого никак, и каким образом?

ответ

1

Индексы на UniversityId и CityId не нужны.

ORDER BY может быть оптимизирован с индексом на StudentName.

+0

Спасибо за ваш ответ. Да, StudentName уже проиндексирован, забыл добавить это. В этом случае мне действительно нужно просто имя UniversityName и CityName из таблиц университета и города, и на самом деле у меня гораздо больше столбцов, чем в приведенном выше примере. Итак, я ничего не могу сделать, чтобы, возможно, игнорировать остальные столбцы и как-то ускорить процесс? –

+1

Вы можете создать индексы покрытия, но это не поможет. Если вам действительно нужна более высокая скорость, может быть более продуктивным оптимизировать аппаратное обеспечение или конфигурацию программного обеспечения. –

+0

SQLite и Inner Join не являются друзьями вообще .... – Peter

Смежные вопросы