小编WPF*_*Bie的帖子

如何执行UPSERT以便我可以在更新部分中使用新旧值

愚蠢而简单的例子:假设我有一个表'Item',其中我保存了收到的项目的总数.

Item_Name              Items_In_Stock
Run Code Online (Sandbox Code Playgroud)

项目名称是主键.当我收到数量为X的项目A时,如何实现以下目标.

如果该项目不存在,我为项目A插入一个新的,并将库存中的项目设置为X,如果存在库存中的项目为Y的记录,则库存中的项目中的新值为(X + Y)

INSERT INTO `item`
(`item_name`, items_in_stock)
VALUES( 'A', 27)
ON DUPLICATE KEY UPDATE
`new_items_count` = 27 + (SELECT items_in_stock where item_name = 'A' )
Run Code Online (Sandbox Code Playgroud)

我的问题是我的实际表中有多列.在更新部分中编写多个select语句是个好主意吗?

当然我可以在代码中完成它,但有更好的方法吗?

mysql performance upsert

64
推荐指数
3
解决办法
7万
查看次数

SQLite:实际限制是什么?

在您将此问题标记为重复之前,请听我说!
我已经阅读过这里提出的关于如何提高性能的问题,例如,提一下提高SQLite的每秒INSERT性能?和什么是源码的非常大的数据库文件的性能特点?

我正在努力使sqlite工作的数据库文件大小为5千兆字节.相反,那里有人,即使数据库大小高达160 GB,他们声称sqlite对他们来说"很棒".我自己没有尝试过,但是从提出的问题来看,我想所有的基准测试都可能只用数据库中的表来完成.

我使用的数据库
- 20页左右的表
-表中有一半以上的15列
-每个15或那么列的表都有6/7的外键列-其中的几个表已经长大在一个月内拥有2700万条记录

我使用的开发机器是3 GHz四核机器,有4 GB RAM,但只需要3分钟就可以查询这些大表中的row_count.

我找不到任何方法来水平划分数据.我拥有的最佳镜头是将数据分成多个数据库文件,每个表一个.但在这种情况下,据我所知,外键列约束不能使用,所以我将不得不创建一个自足表(没有任何外键).

所以我的问题是
a)我是否使用错误的数据库进行工作?
b)你觉得我哪里出错了?
c)我还没有在外键上添加索引,但如果只是行计数查询需要四分钟,外键索引如何帮助我?

编辑提供更多信息,即使没有人要求它:)我使用SQLite版本3.7.9与system.data.sqlite.dll版本1.0.77.0

EDIT2:我认为我与160位演员的不同之处在于他们可以选择单独的唱片或小范围的唱片.但是我必须在表中加载所有2700万行,将它们与另一个表连接起来,按照用户的要求对记录进行分组并返回结果.有什么输入是为这些结果优化数据库的最佳方法.

我不能缓存先前查询的结果,因为它在我的情况下没有意义.点击缓存的可能性相当低.

sqlite select database-performance

7
推荐指数
1
解决办法
8775
查看次数

Orderby不会调用所提供的比较器的Compare()

任何人都可以解释为什么.net框架在我使用Enumerable.OrderBy时不会调用我的比较器的比较方法.而当我使用List.Sort()时它会被调用.

//以下代码取自StackOverFlow.com上的另一篇文章

class Employee
{
    public string Name { get; set; }
    public int Salary { get; set; }
}


class Employee_SortBySalaryByAscendingOrder : IComparer<Employee>
{
    #region IComparer<Employee> Members

    public int Compare(Employee x, Employee y)
    {
        if (x.Salary > y.Salary) return 1;
        else if (x.Salary < y.Salary) return -1;
        else return 0;
    }

    #endregion
}


    private void TestSort(object sender, EventArgs e)
    {

        List<Employee> empList = new List<Employee>() 
                                {       
                                    new Employee { Name = "a", Salary = 14000 },
                                    new Employee { …
Run Code Online (Sandbox Code Playgroud)

.net c# linq

3
推荐指数
1
解决办法
488
查看次数

标签 统计

.net ×1

c# ×1

database-performance ×1

linq ×1

mysql ×1

performance ×1

select ×1

sqlite ×1

upsert ×1