Performance optimization is emerging as one of important issues in object-oriented databases. In this thesis, we explore the problem of the optimal index configurations in object-oriented database systems. The problem is to find a set of nested attribute indexes under which the overall cost of processing retrieval queries and maintaining the indexes for update queries in a given workload is minimal. We also take into account a space limit for storing the indexes. The primary idea of the proposed methodology is to reduce the problem to that of selecting indexes in such a way that the sum of cost savings are maximal subject to a given storage capacity. The correctness of our approach is proved using analytic cost formulas. We characterize the computational difficulty of the problem, which is shown to be NP-hard. We propose two methods for finding index configurations: a simple but effective approximation algorithm and an Integer Programming formulation. Experiments are conducted to assess the performances of the proposed methods. The experiment results indicate that the proposed approximation algorithm works well for various mixtures of input parameters and the Integer Programming model is well suited to find optimal solutions for a wide range of problem sizes. As an initial effort to extend the index configuration problem to the context of class-attribute hierarchy, the later part of this thesis explores the optimization of object-oriented queries with multiple path predicates in class-attribute hierarchies. We formulate the query optimization problem and apply a genetic strategy to it. Experiment results show that our formulation is well suited to the behaviour of genetic algorithms. Genetic algorithm works efficiently both in the solution quality and execution time, indicating its feasibility for use in query optimizations of database systems.