img

关于索引和操作符

索引

MySQL 和 MongoDB 使用不同的语法和命令来创建索引。MySQL 使用标准的 SQL 语句,而 MongoDB 使用其特有的 shell 语法。下面我将为 MySQL 和 MongoDB 分别展示如何创建索引的示例。

MySQL 创建索引的 SQL 语句

在 MySQL 中,你可以使用 CREATE INDEX 语句或 ALTER TABLE 语句来创建索引。

使用 CREATE INDEX 语句

CREATE INDEX index_name ON table_name (column1, column2, ...);

例如,为 users 表的 email 列创建一个名为 idx_email 的索引:

CREATE INDEX idx_email ON users (email);

使用 ALTER TABLE 语句

ALTER TABLE table_name ADD INDEX index_name (column1, column2, ...);

例如,同样为 users 表的 email 列创建一个名为 idx_email 的索引:

ALTER TABLE users ADD INDEX idx_email (email);

你还可以创建唯一索引,以确保索引列中的值是唯一的:

CREATE UNIQUE INDEX unique_index_name ON table_name (column1, column2, ...);

或者使用 ALTER TABLE:

ALTER TABLE table_name ADD UNIQUE INDEX unique_index_name (column1, column2, ...);

MongoDB 创建索引

在 MongoDB 中,你使用 createIndex() 方法来创建索引。这是在 MongoDB shell 中执行的。

db.collection.createIndex(
   { field1: 1, field2: -1 },
   { unique: true, sparse: true }
)

例如,为 users 集合的 email 字段创建一个唯一索引:

db.users.createIndex(
   { email: 1 },
   { unique: true }
)

上面的例子中,{ email: 1 } 定义了索引的字段和排序方向(1 表示升序,-1 表示降序)。{ unique: true } 选项指定了这是一个唯一索引。

你还可以创建复合索引,即在多个字段上创建索引:

db.users.createIndex(
   { firstName: 1, lastName: 1 }
)

此外,MongoDB 还支持地理空间索引、文本索引、哈希索引等。创建这些索引的语法和选项会有所不同。

总之,MySQL 和 MongoDB 在创建索引时使用了不同的语法和命令,但它们的目的都是为了提高查询性能。在实际应用中,你应该根据数据库的类型和查询需求来选择合适的索引类型。

关于createIndex

关于mongodb的中文手册open in new window里面写了的很清楚了,大家可以在里面找到对应的方法,内的具体参数,比如db.collection.createIndex(keys,options) options选项:

ParameterTypeDescription
backgroundBoolean建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加"background" 可选参数。 "background" 默认值为false
uniqueBoolean建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
namestring索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
partialFilterExpressiondocument如果指定,则索引仅引用与过滤器表达式匹配的文档
sparseBoolean对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.
expireAfterSecondsinteger指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
storageEnginedocument存储引擎,允许用户在创建索引时基于每个索引配置存储引擎。

索引相关指令

// 清除指定
db.collection.dropIndex(index)
// 清除全部
db.collection.dropIndexes()
// 查看索引
db.collection.getIndexes()
//查看索引大小
db.collection.totalIndexSize()