Skip to main content

Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "EclipseLink/DesignDocs/283430"

m (Open Issues)
m (Open Issues)
 
Line 86: Line 86:
 
| 2  
 
| 2  
 
|  
 
|  
| Shouldn't the @Index annotation support choosing the various types of index  
+
|  
 +
  Shouldn't the @Index annotation support choosing the various types of index  
 
   algorithms supported by the database being used? We may need to add another  
 
   algorithms supported by the database being used? We may need to add another  
   attribute to @Index, named 'type' that can take a value from predefined list
+
   attribute to @Index, named 'type' that can take a value from predefined  
   of values like BTree, RTree, Hash, BitMap, etc. Further, there should be a
+
   list of values like BTree, RTree, Hash, BitMap, etc. Further, there should  
   way to define clustered indexes too, may be an attribute  
+
   be a way to define clustered indexes too, may be an attribute  
 
   clustered=true/false.
 
   clustered=true/false.
  

Latest revision as of 16:18, 6 September 2010

Design Specification: Indexes

ER 283430

Feedback

Document History

Date Author Version Description & Notes
2010-08-25 James 0.1 Draft

Project overview

The ability to define database indexes and have EclipseLink's DDL generation generate them.


Concepts

An index is a database structure define for a table to improve query and lookup performance for a set of columns.


Requirements

Support defining indexes in JPA through annotations. Support defining indexes in JPA through XML.


Design Constraints

Must be database independent.

Functionality

An @Index annotation and XML will be added. An index can be defined on an Entity, or attribute. For the Entity it must define a set of columns to index, the table will be defaulted. For an attribute the table and column will be defaulted.

The name of the index will be default to _<column>_INDEX, but the name should normally be provided. An IndexDefinition will also be added to the schema framework to allow defining, creating/dropping indexes through code. Annotation process will create an IndexDefinition from the @Index and store in on the descriptor's DatabaseTable. During default schema generation the DefaultSchemaGenerator will add the IndexDefinition to the TableDefition to be created. The existing support to create indexes for primary key and unique constraints will be refactored to use the IndexDefinition. Support for indexes will be defined in the platform, by default a platform will be assumed to support indexes. MySQL will require special drop syntax, to include the table name in the drop statement.

Testing

Define indexes for some test schemas. Need to test on all databases.

API

  • Index
  • @Index(name<String>, schema<String>, catalog<String> table<String>, unique<boolean>, columns<String>[])
  • @Indexes

Config files

  • orm.xml
<index name="EMP_NAME_INDEX" table="EMPLOYEE" unique="true">
    <column>F_NAME</column>
    <column>L_NAME</column>
</index>

Documentation

Should be documented under extended annotations, and schema generation.

Open Issues

Issue # Owner Description / Notes
1 What databases support indexes, do any use a different syntax?
2
 Shouldn't the @Index annotation support choosing the various types of index 
 algorithms supported by the database being used? We may need to add another 
 attribute to @Index, named 'type' that can take a value from predefined 
 list of values like BTree, RTree, Hash, BitMap, etc. Further, there should 
 be a way to define clustered indexes too, may be an attribute 
 clustered=true/false.

Decisions

Issue Description / Notes Decision

Future Considerations

  • Other DDL options.

Back to the top