关于索引和操作符
索引
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的中文手册里面写了的很清楚了,大家可以在里面找到对应的方法,内的具体参数,比如db.collection.createIndex(keys,options)
options选项:
Parameter | Type | Description |
---|---|---|
background | Boolean | 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加"background" 可选参数。 "background" 默认值为false 。 |
unique | Boolean | 建立的索引是否唯一。指定为true创建唯一索引。默认值为false . |
name | string | 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。 |
partialFilterExpression | document | 如果指定,则索引仅引用与过滤器表达式匹配的文档 |
sparse | Boolean | 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false . |
expireAfterSeconds | integer | 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。 |
storageEngine | document | 存储引擎,允许用户在创建索引时基于每个索引配置存储引擎。 |
索引相关指令
// 清除指定
db.collection.dropIndex(index)
// 清除全部
db.collection.dropIndexes()
// 查看索引
db.collection.getIndexes()
//查看索引大小
db.collection.totalIndexSize()