Which DBMSs offer index-organized tables?
My current knowledge:
- Oracle does offer index-organized tables and defaults to heap-organized.
- I heard that SQL-Server uses only index-organized tables 开发者_开发知识库
I am especially interested in answers for MySQL, PostgreSQL, Informix and DB2.
MySql has clustered indexes but there appears to be limited control on these indexes.
MySql clustered indexes and see this question here
DB2 has MDC (multi-dimension cluster) which can effectively index organise the table in several ways. I've never used them but you can probably just have a single dimension MDC which would be the same as a standard clustered index.
Oracle is a bit of a pain. Last time I checked with its IOT implementation requires you create the table as IOT and you can't change it later, which is annoying when you want to load a load of data with no indexes for speed and then index it after.
SQL Server can store table data in either Heap Structures
or Clustered Index Structures
. If a table doesn't have a clustered index then it is considered a heap. For more details see here Heap Structures and Clustered Index Structures
As for Informix Dynamic Server (IDS) or Standard Engine (SE), they both support clustered and non-clustered indexes. IDS uses RSAM and SE uses C-ISAM B-Tree indexing. For both, when a cluster index is created, a table's rows are physically ordered in the same order as the index, but as new rows are added to the table, the row is physically placed at EOF (heap).
PostgreSQL offers clustered indexes.
The command cluster <table> <index>
will order the database table physically according to the index. Subsequent data modifications will ignore this ordering. The ordering can be refreshed by issuing cluster <table>
.
See https://www.postgresql.org/docs/10/static/sql-cluster.html
精彩评论