Mysql 在Oracle中创建表时创建索引

Mysql 在Oracle中创建表时创建索引,mysql,oracle,indexing,Mysql,Oracle,Indexing,在MySql中,可以在一个(非唯一的)列和一个表上创建索引,例如 create table orders( orderid varchar(20) not null unique, customerid varchar(20), index(customerid) ); 在Oracle中没有找到相应的选项,即在创建表时创建索引,而不是在以后作为单独的命令创建索引,我怀疑这是不可能的。这是正确的吗?如果是这样的话,这背后的原因是什么?比如这里讨论的效率 ? 提前谢谢 差异

在MySql中,可以在一个(非唯一的)列和一个表上创建索引,例如

create table orders(
   orderid varchar(20) not null unique,
   customerid varchar(20),
   index(customerid)
   );
在Oracle中没有找到相应的选项,即在创建表时创建索引,而不是在以后作为单独的命令创建索引,我怀疑这是不可能的。这是正确的吗?如果是这样的话,这背后的原因是什么?比如这里讨论的效率 ?
提前谢谢

差异的根本原因是MySQL和Oracle是两种截然不同的产品,由不同的软件工程团队在不同的时间开发。在这种情况下,MySQL归甲骨文所有并不意味着什么。MySQL是一种单独开发的产品,后来被Oracle购买。至于为什么这两个不同的设计团队做出这样的决定。。。你得问问他们。但我很确定这与你所说的运营效率无关。一旦创建了表和索引,作为创建表的一部分创建索引与单独创建索引之间没有区别。因此,在所述表上的任何DML的效率都不会有任何差异。

除了定义为主要约束或唯一约束的一部分的索引之外,似乎没有办法将索引定义为Oracle中的
CREATE table
语句的一部分。尽管
USING INDEX
子句是
CREATE TABLE
语句的
constraint state
元素的一部分,但是如果您尝试在任何约束定义中包括
USING INDEX
子句(例如,主约束或唯一约束除外),则会出现
缺少右括号的错误


至于“为什么”——这是一个只有Oracle架构团队中的人才能回答的问题。从我个人面向用户的观点来看,我认为能够创建索引作为
create TABLE
语句的一部分没有什么特别的价值,但我已经习惯了Oracle的工作方式,并将我的思维模式定位于这个特定的方向。YMMV.

好的,谢谢,但是在任何情况下,在Oracle中创建表时都不能生成索引,这是真的吗?我在CREATE table语法中看到了提示,建议您可以在CREATE table语句中显式创建和索引。如果在CREATETABLE中指定一列为PK或UK,oracle将自动创建一个索引以强制执行该约束。但是不能,您不能只将创建索引嵌入到创建表中。在某些情况下,先填充表,然后构建索引会显著提高效率。在MySQL中,
FULLTEXT
更喜欢这样,而
SPATIAL
要求这样。另一方面,BTree在增量构建方面做得相当不错。@RickJames-但这也是在创建表之后。无论索引是作为CREATE表的一部分创建的,还是作为单独的CREATE索引创建的,一旦创建了表和索引,使用哪种机制来实现它都无关紧要。