关于索引和运算符
索引
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()
运算符
以下截自中文操作手册,并且里面写上了详细的案例,点击可以跳转,可能有些是机器翻译的,表达不是很清楚!!
1 比较
名称 | 描述 |
---|---|
$eq | 匹配等于指定值的值。 |
$gt | 匹配大于指定值的值。 |
$gte | 匹配大于或等于指定值的值。 |
$in | 匹配数组中指定的任何值。 |
$lt | 匹配小于指定值的值。 |
$lte | 匹配小于或等于指定值的值。 |
$ne | 匹配所有不等于指定值的值。 |
$nin | 不匹配数组中指定的任何值。 |
2 逻辑
名称 | 描述 |
---|---|
$and | 用逻辑联接查询子句AND 将返回两个子句都匹配的所有文档。 |
$not | 反转查询表达式的效果,并返回与查询表达式不匹配的文档。 |
$nor | 用逻辑联接查询子句NOR 将返回两个子句均不匹配的所有文档。 |
$or | 用逻辑联接查询子句OR 将返回符合任一子句条件的所有文档。 |
3 元素
名称 | 描述 |
---|---|
$exists | 匹配具有指定字段的文档。 |
$type | 如果字段是指定类型,则选择文档。 |
4 评估
名称 | 描述 |
---|---|
$expr | 允许在查询语言中使用聚合表达式。 |
$jsonSchema | 根据给定的JSON Schema验证文档。 |
$mod | 对字段的值执行模运算并选择具有指定结果的文档。 |
$regex | 选择值与指定的正则表达式匹配的文档。 |
$text | 执行文本搜索。 |
$where | 匹配满足JavaScript表达式的文档。 |
5 地理空间
名称 | 描述 |
---|---|
$geoIntersects | 选择与GeoJSON几何形状相交的几何形状。该2dsphere索引支持 $geoIntersects 。 |
$geoWithin | 选择边界GeoJSON几何内的几何。该2dsphere和2D指标支持 $geoWithin 。 |
$near | 返回点附近的地理空间对象。需要地理空间索引。该2dsphere和2D指标支持 $near 。 |
$nearSphere | 返回球体上某个点附近的地理空间对象。需要地理空间索引。该2dsphere和2D指标支持 $nearSphere 。 |
6 数组
名称 | 描述 |
---|---|
$all | 匹配包含查询中指定的所有元素的数组。 |
$elemMatch | 如果array字段中的元素符合所有指定$elemMatch 条件,则选择文档。 |
$size | 如果数组字段为指定大小,则选择文档。 |
7 按位
名称 | 描述 |
---|---|
$bitsAllClear | 匹配其中一组位位置的数值或二进制值都具有值0 。 |
$bitsAllSet | 匹配其中一组位位置的数值或二进制值都具有值1 。 |
$bitsAnyClear | 匹配数字或二进制值,其中一组位位置中的任何位的值为0 。 |
$bitsAnySet | 匹配数字或二进制值,其中一组位位置中的任何位的值为1 。 |
8 注释
名称 | 描述 |
---|---|
$comment | 向查询谓词添加注释。 |
9 投影
名称 | 描述 |
---|---|
$ | 在与查询条件匹配的数组中投影第一个元素。 |
$elemMatch | 投影与指定$elemMatch 条件匹配的数组中的第一个元素。 |
$meta | 投影$text 操作期间分配的文档分数。 |
$slice | 限制从数组投影的元素数量。支持跳过和限制切片。 |