问题列表 - 第21页

包含表的所有列的主键有什么好处吗?

我有一个包含四列的表,这些列都是不可为空的,并且数据是这样的,需要所有四列来区分唯一记录。这意味着如果我要创建一个主键,它需要包含所有列。对表的查询几乎总是拉回单个记录,即所有列都将在查询中被过滤。

由于需要搜索每一列,拥有主键对我有好处吗(除了强制记录的唯一性)?

sql-server-2005 primary-key

17
推荐指数
2
解决办法
1万
查看次数

为什么有人会在查询中输入“where 1=1”?

我今天在我们的数据库中遇到了一个视图,其中 where 子句中的第一个语句是where 1 = 1. 这不应该对每条记录都返回 true 吗?如果不过滤任何记录,为什么有人会写这个?

sql-server-2005

19
推荐指数
2
解决办法
6930
查看次数

唯一聚集索引和聚集主键之间有什么明显的区别吗?

我知道两者之间的含义或意图可能有所不同,但是聚集主键和聚集唯一索引之间是否存在任何行为或性能差异?

index sql-server-2005 primary-key clustered-index

17
推荐指数
2
解决办法
1545
查看次数

为什么这个实体框架查询在 MySQL 中表现如此糟糕?

让我给你一些设置。我们在 MySQL 5.1 上有一个 InnoDB 表,有近 2000 万条记录,没有外键,以及我们所做的查询的适当索引。我们正在为 .NET Entity Framework 使用最新的 6.3.5 MySQL 版本。通常我们习惯于处理 SQL Server 和实体框架,但在这个项目中我们决定尝试一下 MySQL。

我对这个问题有一些理论,但让我先做代码设置

EF LINQ 查询

var failsForAcct1001 = db.Failures.Where(x => x.AccountId == 1001);
/* farther down and later on in the code */
return failsForAcct1001.OrderBy(x => x.FailureId).Take(50);
Run Code Online (Sandbox Code Playgroud)

生成的 MySQL 代码

请忽略列名,它们不是理解问题所必需的

select
    External1.FailureId,
    External1.col2,
    External1.col3,
from (select
          Inner1.FailureId,
          Inner1.col2,
          Inner1.col3,
      from Failures Inner1
      where External1.AccountId = 1001
    ) External1
order by External1.FailureId
limit 50
Run Code Online (Sandbox Code Playgroud)

生成的这个 SQL 与 SQL Server 中发生的情况非常相似,SQL 处理它没有问题。这不仅仅是一个实体框架问题,当我接受这个查询并在 MySQL …

mysql performance orm entity-framework

6
推荐指数
1
解决办法
7173
查看次数

获取 SQL 规范的免费副本?

曾经有一个指向 9075:2003 的 JTC 1/SC 32 工作草案的公共链接,但自从他们在 2003 年之后的修订版中开始使用以来,我一直没有使用该链接。鉴于有许多其他规范的公开副本(例如 11179-1:2004),我想知道是否有人知道合法访问 ISO/IEC 9075 规范的任何方法。也许有一个指向工作草案的链接,或者一个基金会以不到大约 3000 美元的价格提供对它的访问,我从标准机构学习 SQL 而不是依赖于特定于实现的书籍和文档需要花费我。

sql-standard

4
推荐指数
1
解决办法
572
查看次数

每秒数千次的插入更新和选择

我有一个表,可以在一秒钟内从数千次中插入、更新和选择。不过我遇到了死锁问题。

  1. 数据库有 2-5 个同时使用 Linq to Sql 的 1000+ 行插入。
  2. 每秒 40 次,还有一个来自该表的选择语句,如果条件为真(95% 的时间为真),则使用类似于以下的代码进行更新:

    创建过程 AccessFile (@code, @admin) AS

    声明@id int、@access 日期时间、@file 字符串

    从代码 = @code 的文件中选择 @id=Id、@accessed = 访问、@file = 文件

    IF @admin<> 0 IF @accessed 为空开始

    设置事务隔离级别读取未提交

    更新文件集访问 = getdate() 其中 id = @id

    设置事务隔离级别读取已提交

    结尾

    选择@id 作为Id,@file 作为文件

似乎是更新与导致死锁的插入冲突。

该示例是一个 1 比 1 的存储过程,唯一的区别是名称。假定为 1 和 2,无论存储过程名称如何。

sql-server-2008 deadlock

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

索引 VARCHAR 列是个好主意/方法吗?

我们使用的是 PostgreSQL v8.2.3。

涉及的表有:EMPLOYEE和EMAILLIST。

Table 1: EMPLOYEE (column1, column2, email1, email2, column5, column6)
Table 2: EMAILLIST (email)
Run Code Online (Sandbox Code Playgroud)

2 个表以这样的方式连接,如果 EMPLOYEE.EMAIL1 或 EMPLOYEE.EMAIL2 没有匹配的条目,则将返回这些行。

SELECT employee.email1, employee.email2,
        e1.email IS NOT NULL AS email1_matched, e2.email IS NOT NULL AS email2_matched
   FROM employee
   LEFT JOIN emaillist e1 ON e1.email = employee.email1
   LEFT JOIN emaillist e2 ON e2.email = employee.email2
 WHERE e1.email IS NULL OR e2.email IS NULL
Run Code Online (Sandbox Code Playgroud)

列EMAIL是VARCHAR(256)的EMAILLIST表索引。现在,响应时间是 14 秒。

表数统计:目前EMPLOYEE有165,018条记录,EMAILLIST有1,810,228条记录,未来两个表都有望增长。

  1. 索引 VARCHAR …

postgresql performance index query

38
推荐指数
2
解决办法
4万
查看次数

构建动态 SQL-Server Where 子句

让我们回顾一下SQL-Server 的dba.exchange Oracle 问题。

这是 SaUce 的代码,经过一些格式化:

CREATE PROCEDURE GetCustomer 
    @FirstN nvarchar(20) = NULL, 
    @LastN nvarchar(20) = NULL, 
    @CUserName nvarchar(10) = NULL, 
    @CID nvarchar(15) = NULL 
as
begin 
    DECLARE @sql nvarchar(4000)

    SELECT @sql = 'C_FirstName, C_LastName, C_UserName, C_UserID 
FROM CUSTOMER
WHERE 1=1 '

    IF @FirstN IS NOT NULL 
        SELECT @sql = @sql + ' AND C_FirstName like @FirstN ' 

    IF @LastN IS NOT NULL 
        SELECT @sql = @sql + ' AND C_LastName like @LastN ' 

    IF @CUserName IS …
Run Code Online (Sandbox Code Playgroud)

performance sql-server sql-injection

6
推荐指数
1
解决办法
4054
查看次数

MySQL 复制 - 为复制引入新的 Slave

我最近担任了一个系统管理员职位,负责管理一组 20 台(左右)服务器。我之前没有处理过的一件事(除了在测试情况下)是向 MySQL 复制场引入一个新的从属服务器。

基本上复制设置如下:

MS -> SL1 -> SL2 (backup)
|                     SL3 (reporting)
SB2                   SL4 (loadbalanced web slave)
                      SL5 (loadbalanced web slave)
                      SL6 (loadbalanced web slave)
                      SL7 (loadbalanced web slave)
Run Code Online (Sandbox Code Playgroud)

但基本上它是一个有两个读从站的主站,(一个纯粹用于备份),一个主读从站(主站正在等待,如果你愿意的话),后面有 6 个从站,用于额外的备份,4 个负载均衡的网络读取从站和用于报告的服务器。

我在网上做了很多阅读,并假设向环境中添加一个新的奴隶(来自 SL1),将是:

  • 登录 SL2:
    • STOP SLAVE;
    • FLUSH TABLES WITH READ LOCK;
    • (复制mysql目录到新服务器)
    • 完成后,UNLOCK TABLES;然后START SLAVE;(到目前为止一切正常,SL2 重新上线并赶上)
    • 确保新服务器上的 db 结构正确,并且 master.info 指向正确的位置(正确指向 SL1)
    • 在新服务器上启动 MySQL,检查 Slave SQL 和 I/O 是否正在运行(是的,这很好)

但是,一段时间后,我从二进制日志中收到重复的键插入错误:

110122 17:01:25 [ERROR] Slave SQL: Error 'Duplicate entry '2011-01-22 17:00:01' …
Run Code Online (Sandbox Code Playgroud)

mysql replication

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

MySQL 中内存的最佳用途是什么?

我有一个内存为 2Gb 的 MySql 服务器。什么是最好的配置,然后使用最好的结果?如何将此内存“分配”到 MySql 服务器?

mysql performance memory

5
推荐指数
1
解决办法
1775
查看次数