当前位置: 首页 > news >正文

索引的强大作用和是否创建的索引越多越好

在经常查询字段上创建索引。
在大数据的情况下,在索引上查找可以提交10倍以上甚至1000倍的速度。
实际测试,不在索引上查找用时12秒左右。建立索引,在索引上查找速度提高只耗时1.1秒左右。当然索引也是一把双刃剑,在一个表上创建索引过多反而降低查询速度。
注意:
索引具有包含关系。
如:// 创建复合唯一索引 WpEstateDataCompletenessSchema.index({ real_estate_name: 1, city: 1 }, { unique: true });,实际创建的索引是这个形式:real_estate_name_1_city_1。因为有这个索引,实际上就不需要创建索引:WpEstateDataCompletenessSchema.index({ real_estate_name: 1 });了当然你要是按照city查询,需要创建索引WpEstateDataCompletenessSchema.index({ city: 1 });
若遇到两条记录的主键冲突导致无法插入数据时,重新创建符合唯一主键,需要先删除原来的索引,并且不能删除原来的主键后立即插入原来出问题的记录。要稍微等待下,来避免缓存问题导致的删除索引失败问题。
下面是一个例子,这个是原来以title作为主键(又叫唯一索引):

var Mongoose = require('mongoose');
var ArticleUrlModel = new Mongoose.Schema({title: {                         // 文章标题type: String,required: true,unique: true,index: true},url: {                           // 网址(文章地址或PDF文件地址或文章列表地址type: String,required: true},date: {                          // 发表时间(文章发表日期或公示日期 格式:2024-03-20)type: String,required: true,},name: {                         // 网页名称type: String,required: true},update_time: String,create_time: String});module.exports = ArticleUrlModel;

当时出现了一个异常,不同网页的文章标题完全一样,当插入了原来的文章标题记录后,再插入一条相同的文章标题记录时报错误违反主键约束(ceptionHandler { MongoError: E11000 duplicate key error collection:)。
如何处理呢?解决方案是:在title:和name上创建唯一复合主键。删除原来的索引,并注意缓存问题。
修改后的数据表结构:

var Mongoose = require('mongoose');
var ArticleUrlModel = new Mongoose.Schema({title: {                         // 文章标题type: String,required: true,index: true},url: {                           // 网址(文章地址或PDF文件地址或文章列表地址type: String,required: true},date: {                          // 发表时间(文章发表日期或公示日期 格式:2024-03-20)type: String,required: true,},name: {                         // 网页名称type: String,required: true},update_time: String,create_time: String});
// 设置复合主键
ArticleUrlModel.index({ title: 1, name: 1 }, { unique: true });module.exports = ArticleUrlModel;
        // 删除title字段的索引
        ArticleUrlModel.collection.dropIndex('title_1', function(err) {if (err) {console.log('Error dropping index:', err);} else {console.log('Index successfully dropped!');}});

注意:不能删除索引后立即插入原来冲突的记录。

http://www.lryc.cn/news/364953.html

相关文章:

  • 批量GBK转UTF-8
  • C#WPF数字大屏项目实战08--生产量/良品统计
  • 22、matlab锯齿波、三角波、方波:rectpuls()函数/sawtooth()函数/square()函数
  • 手机和WINDOWS电脑蓝牙连接后怎样放歌,无法选择媒体音频 蓝牙媒体音频勾选不上
  • MatrixOne→MatrixOS:矩阵起源的创业史即将用“AI Infra”和“AI Platform”书写新章程
  • vue3将自定义组件插入指定dom
  • flutter封装日历选择器(单日选择)
  • SwiftUI调用相机拍照
  • elasticsearch (dsl)
  • 聊聊大模型微调训练全流程的思考
  • Python变量符号:深入探索与实用指南
  • 实验八 页面置换模拟程序设计
  • Spring类加载机制揭秘:深度解析“卸载”阶段
  • Jupyter Notebook快速搭建
  • Linux C语言:数组的定义和初始化
  • spring框架限制接口是否要登录过才能访问
  • 【全开源】废品回收垃圾回收小程序APP公众号源码PHP版本
  • 勒索软件分析_目标文件扫描行为分析
  • 2024050401-重学 Java 设计模式《实战代理模式》
  • HTML跨年烟花
  • 微服务第二轮
  • 线性模型-分类
  • OpenAI前董事会成员称Sam Altman因 “ 向董事会撒谎 ” 而被解雇
  • 【启明智显分享】WIFI6开发板ZX6010:开源OpenWrt SDK,接受定制!
  • C语言能否使⽤ fflush( ) 函数清除多余的输⼊?
  • 如何把试卷上的字去掉再打印?分享三种方法
  • Android开机动画压缩包zip,自制开机动画(基于Android10.0.0-r41)
  • 手机站怎么推广
  • Mysql疑难报错排查 - Field ‘XXX‘ doesn‘t have a default value
  • YOLOv8_obb预测流程-原理解析[旋转目标检测理论篇]