efcore为啥代码量大

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了efcore为啥代码量大相关的知识,希望对你有一定的参考价值。

参考技术A EF Core是Entity Framework的新版本,与传统Entity Framework相比,它具有更轻量级的架构,可以帮助减少代码量和提高运行效率。EF Core也提供了更多的可扩展性,允许用户更好地自定义应用程序组件,从而减少代码量。EF Core还提供了更多的自定义查询选项,以及更强大的查询性能,帮助减少代码量。另外,EF Core还提供了更多可用于访问数据库的API,这些API可以帮助减少代码量。

为啥我使用xmlhttprequest抓取数据时主键跳转量大?

【中文标题】为啥我使用xmlhttprequest抓取数据时主键跳转量大?【英文标题】:Why does my primary key jump large amounts when I use xmlhttprequest to capture data?为什么我使用xmlhttprequest抓取数据时主键跳转量大? 【发布时间】:2017-12-20 16:27:36 【问题描述】:

编辑这个问题几乎与 2010 年的 this question 重复,只是我没有使用事务,所以所有答案都没有意义。

编辑我不是在问如何重置主键。我在问为什么主键不按连续数字自动递增。


我正在使用 xmlhttprequest 来捕获键入时的信息并将其存储在我的 Mysql 数据库中。

HTML

<input type="text" name="example" onKeyUp="saveData(this)">

JAVASCRIPT

function saveData(a)
    var z;
    var d=new FormData();
    d.append('data',a.value);
    if(window.XMLHttpRequest)z=new XMLHttpRequest();elsez=new ActiveXObject("Microsoft.XMLHTTP");
    z.onreadystatechange=function()if(z.readyState==4&&z.status==200)if(z.responseText=='false')alert(z.responseText);
    z.open("POST", '/scripts/save_data.php');
    z.send(d);

PHP 出于测试目的,我对 uid 用户 ID 进行了硬编码。

<?php
$stmt=$pdo->prepare("INSERT INTO `user_data` (`uid`, `data`) VALUES (:myuid,:mydata) ON DUPLICATE KEY UPDATE `data`=values(`data`)");
$stmt->bindValue('myuid',1,PDO::PARAM_INT);
$stmt->bindParam('mydata',$_POST['data'],PDO::PARAM_STR);
$stmt->execute();

我的 MySQL 表有...

id, primary INT(10) unsigned auto-increment
uid, INT(10) unsigned
data, VARCHAR(24)

一切都按预期工作,但我没有看到id 的值按预期顺序递增(1、2、3 等)。它在跳跃(1、20 等),就好像线条已经被创建,然后被丢弃,形成最后的线条。谁能解释这种行为?我需要担心吗?

【问题讨论】:

我看不到您在 PHP 脚本中回显任何内容。发帖到/scripts/save_data.php 会得到什么? 可能来自INSERT INTO ... ON DUPLICATE KEY UPDATE ... 似乎为插入保留了一个密钥,然后在更新时将其丢弃。顺便提一句。我不会在每个按键事件中写入数据库。 Resetting the primary key to 1 after deleting all the data的可能重复 您的查询中没有唯一键。更新部分永远不会发生。 ID 每次都会自动递增。 @colburton 除非uid 是问题中未提及的唯一键? 【参考方案1】:

由于您已澄清,您的 INSERT 正在使用 uid 创建重复条目,这就是问题所在:

MySQL 保留下一个自动增量值并在尝试插入之前发出一个结束表锁。然后插入失败,UPDATE 部分发生。但是由于自动增量已经上移并且另一个进程可能已经选择了下一个数字,所以它不会再次减少。所以你得到了一个洞。

当然,这一次只会创建一个“洞”,但由于您是在 keyup 上执行此操作,因此它经常发生。由于硬编码的uid,它也会发生在每个并发请求中。

【讨论】:

次要问题:我是否需要主键,因为我有明确定义唯一性的唯一键?看起来我永远不会真正填满 INT(10) 初级,但是,嘿,这个网站可能已经运行了 50 年......还是我应该忽略整个事情? 您不应包含不需要的键(或列)(性能)。如果您可以选择另一列(也可以是列的组合),您应该这样做。 id 通常用作外键,但您也可能不需要它。但是,如果您使用INNODB,它将始终创建一个自动递增索引,并且如果您不自己添加索引,则不会显示给您。

以上是关于efcore为啥代码量大的主要内容,如果未能解决你的问题,请参考以下文章

程序循环特别慢数据量大怎么办

# 数据量大导致的问题

NPOI导出EXCEL数据量大,分多个sheet显示数据

C#-WebForm-★★★ 分页展示 ★★★

MySQL删除千万级数据量导致的慢查询优化

nodejs的回调函数里为啥需要return