Тогда ваша проблема (и решение) должны быть в Java, верно?

я есть несколько запросов, которые занимают слишком много времени (300 мс), когда БД выросла до нескольких миллионов записей. К счастью для меня, запросы не должны просматривать большую часть этих данных, этих последних 100 000 записей будет достаточно, поэтому я планирую сохранить отдельную таблицу с самыми последними 100 000 записей и выполнить запросы в соответствии с этим. Если у кого-то есть какие-либо предложения для лучшего способа сделать это, это было бы здорово. Мой реальный вопрос: каковы варианты, если запросы должны были работать с историческими данными, каков следующий шаг? Вещи, о которых я думал:

Обновление оборудованияИспользуйте базу данных в памятиКэшируйте объекты вручную в вашей собственной структуре данных

Правильны ли эти вещи и есть ли другие варианты? Есть ли у некоторых поставщиков БД больше функциональности, чем у других, чтобы справиться с этими проблемами, например указание конкретной таблицы / индекса полностью в памяти?

Извините, я должен был упомянуть об этом, я использую mysql.

Я забыл упомянуть индексирование в выше. До сих пор индексирование было моим единственным источником улучшений, чтобы быть честным. Чтобы выявить узкие места, я использовал maatkit для запросов, чтобы показать, используются ли индексы.

Я понимаю, что теперь ухожу от того, для чего был задан вопрос, поэтому, возможно, мне стоит сделать еще один. Моя проблема в том чтоEXPLAIN говорит, что запрос занимает 10 мс, а не 300 мс, о которых сообщает jprofiler. Если у кого-то есть какие-либо предложения, я буду очень признателен. Запрос:

select bv.* 
from BerthVisit bv 
inner join BerthVisitChainLinks on bv.berthVisitID = BerthVisitChainLinks.berthVisitID 
inner join BerthVisitChain on BerthVisitChainLinks.berthVisitChainID = BerthVisitChain.berthVisitChainID 
inner join BerthJourneyChains on BerthVisitChain.berthVisitChainID = BerthJourneyChains.berthVisitChainID 
inner join BerthJourney on BerthJourneyChains.berthJourneyID = BerthJourney.berthJourneyID 
inner join TDObjectBerthJourneyMap on BerthJourney.berthJourneyID = TDObjectBerthJourneyMap.berthJourneyID 
inner join TDObject on TDObjectBerthJourneyMap.tdObjectID = TDObject.tdObjectID 
where 
BerthJourney.journeyType='A' and 
bv.berthID=251860 and 
TDObject.headcode='2L32' and 
bv.depTime is null and 
bv.arrTime > '2011-07-28 16:00:00'

и выход изEXPLAIN является:

+----+-------------+-------------------------+-------------+---------------------------------------------+-------------------------+---------+------------------------------------------------+------+-------------------------------------------------------+
| id | select_type | table                   | type        | possible_keys                               | key                     | key_len | ref                                            | rows | Extra                                                 |
+----+-------------+-------------------------+-------------+---------------------------------------------+-------------------------+---------+------------------------------------------------+------+-------------------------------------------------------+
|  1 | SIMPLE      | bv                      | index_merge | PRIMARY,idx_berthID,idx_arrTime,idx_depTime | idx_berthID,idx_depTime | 9,9     | NULL                                           |  117 | Using intersect(idx_berthID,idx_depTime); Using where | 
|  1 | SIMPLE      | BerthVisitChainLinks    | ref         | idx_berthVisitChainID,idx_berthVisitID      | idx_berthVisitID        | 8       | Network.bv.berthVisitID                        |    1 | Using where                                           | 
|  1 | SIMPLE      | BerthVisitChain         | eq_ref      | PRIMARY                                     | PRIMARY                 | 8       | Network.BerthVisitChainLinks.berthVisitChainID |    1 | Using where; Using index                              | 
|  1 | SIMPLE      | BerthJourneyChains      | ref         | idx_berthJourneyID,idx_berthVisitChainID    | idx_berthVisitChainID   | 8       | Network.BerthVisitChain.berthVisitChainID      |    1 | Using where                                           | 
|  1 | SIMPLE      | BerthJourney            | eq_ref      | PRIMARY,idx_journeyType                     | PRIMARY                 | 8       | Network.BerthJourneyChains.berthJourneyID      |    1 | Using where                                           | 
|  1 | SIMPLE      | TDObjectBerthJourneyMap | ref         | idx_tdObjectID,idx_berthJourneyID           | idx_berthJourneyID      | 8       | Network.BerthJourney.berthJourneyID            |    1 | Using where                                           | 
|  1 | SIMPLE      | TDObject                | eq_ref      | PRIMARY,idx_headcode                        | PRIMARY                 | 8       | Network.TDObjectBerthJourneyMap.tdObjectID     |    1 | Using where                                           | 
+----+-------------+-------------------------+-------------+---------------------------------------------+-------------------------+---------+------------------------------------------------+------+---------------------------------------

7 rows in set (0.01 sec)

Ответы на вопрос(7)

Ваш ответ на вопрос