小编Rol*_*DBA的帖子

主键与唯一索引:与外键的性能差异?

如果您比较通过两个表之间的连接获取数据的查询,性能是否会有任何差异,其中与以下任一表存在关系:

  • 一个主键
  • 唯一索引

performance foreign-key sql-server index-tuning

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

获取 MySQL 中按列分组的最新行

我的问题似乎应该有一个比我想出的更简单的解决方案。从这个数据集开始:

日志表

+--------+-----------+------------------+---------+
| log_id | entity_id |       date       | comment |
+--------+-----------+------------------+---------+
|      1 | A         | 2012-10-23 07:50 | foo     |
|      2 | B         | 2012-10-23 07:59 | bar     |
|      3 | B         | 2012-10-23 08:11 | baz     |
|      4 | A         | 2012-10-23 08:23 | bat     |
+--------+-----------+------------------+---------+
Run Code Online (Sandbox Code Playgroud)

假设我想获取每个实体的日志条目的最新日期,以便结果如下所示:

Results:
+-----------+------------------+--------------+
| entity_id |  last_log_date   | last_comment |
+-----------+------------------+--------------+
| B         | 2012-10-23 08:11 | baz          |
| A         | 2012-10-23 08:23 …
Run Code Online (Sandbox Code Playgroud)

mysql select query-refactor

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

MySQL 复制:插入生成非常大的临时表

我们的复制从站在运行相对简单的插入时生成了大约 300GB 的临时文件。

我们的设置:
大师:5.0.45-0.sles10.x86_64,

从站:5.0.85-win32,也试过 5.1.57-win64,同样的数据库

从机配置:

MAX_CONNECTIONS = 100
query_cache_size变量= 1M
的table_cache = 2048
tmp_table_size的= 32M
thread_cache_size的= 8
binlog_cache_size = 10M
myisam_max_sort_file_size = 100G
myisam_sort_buffer_size = 69M
的key_buffer_size = 55M
read_buffer_size = 64K
read_rnd_buffer_size = 256K
sort_buffer_size的值= 8M
innodb_additional_mem_pool_size = 16M
的innodb_flush_log_at_trx_commit = 0
innodb_log_buffer_size = 16M
innodb_buffer_pool_size = 512M
innodb_thread_concurrency参数= 10
datadir=D:\MySQLrepl\
innodb_data_home_dir=D:\MySQLrepl\
innodb_data_file_path中= ibdata1中:33266M; ibdata2:31484M; ibdata3:52988M; ibdata4:123492M; ibdata5:100M:自动扩展
innodb_log_group_home_dir = d:\ MySQLrepl \
innodb_log_files_in_group = 2
innodb_log_file_size = 128M
登录斌= MySQL的宾

数据库信息:
~360 GB 总数据大小
~50 …

mysql innodb myisam replication

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

具有多列和不同排序选项的 CASE ORDER BY

我试图CASE ORDER BY在存储过程中使用 T-SQL,在其中我将 @OrderBy 参数作为 TINYINT 传递。

  • @Orderby = 1 Then Date column should be ASC
  • @Orderby = 2 Then Date column should be DESC

我的问题是:当我为该参数传递 2 时,如何让日期列对 desc 进行排序,并在同一个 CASE ORDER BY 语句中将字符串列按 asc 排序?

这就是我现在所拥有的 CASE ORDER BY

    ORDER BY 
    CASE WHEN @OrderBy = 1 THEN CONVERT(NVARCHAR(30) , ccd.CertEndDate) + tp.LastName + tp.FirstName END ,
    CASE WHEN @OrderBy = 2 THEN CONVERT(NVARCHAR(30) , ccd.CertEndDate) + tp.LastName + tp.FirstName END DESC
Run Code Online (Sandbox Code Playgroud)

此代码解析并返回一个结果集没有错误,但第二个 CASE ORDER BY 都是 …

stored-procedures order-by t-sql case

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

如何在数据库中保留很长的问题和答案?

我正在计划我的数据库设计为 3 类不同的客户(目前至少 3 个)提供 3 组多个问题,每组包含大约。100 个问题,等待他们的答案被保存在数据库中。

这些问题都在必填的问卷中,这对我的工作来说是非常重要的材料,然后将它们全部作为电子邮件发送给我自己是不可替代的。我不是这个领域的专家。我不确定存储、检索和管理它们的最佳方法是什么。

请查看我的数据库设计和建议以获得更好的方法。

表格:问题

  • 设置名称
  • 第一季度
  • Q2
  • Q3
  • ...

表:问卷

  • 顾客ID
  • 设置名称
  • A1
  • A2
  • A3
  • ...

我有3个主要问题:

  1. 如何根据客户资料在PHP页面上显示每组问答?
  2. 问题需要显示在网页上,如果是手动,文本显示,如果我决定移除、编辑或删除一些问题,这对我来说将是一项耗时的工作。你会推荐什么方式?
  3. QUESTIONS 表中的所有问题(Q1、Q2 和...)都需要与 QUESTIONNAIRE 表中的答案(A1、A2 和...)完全映射,有没有更好的方法?

database-design

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

mysql 复制在什么情况下可能会中断?

我在主/从配置模式下运行 mysql 服务器。有多个从主从复制。它们工作正常并且它们的复制状态受到监控。

其中一名奴隶为特殊目的服务。开发人员给了我一组要在从属 A 上复制的从属数据库上运行的更新查询。

他们正在更新数据库表中的旧记录(修改大量记录的列数据)。

问题

  • 有什么办法可以弄清楚给定的查询是否会破坏复制?
  • 对于将来,我如何确定查询是否会破坏复制?

mysql replication

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

使用子查询和 IN 子句查询性能

我正在尝试从历史表中为多个设备(唯一序列号)选择一系列数据,并想知道为什么以下查询的时间差异如此之大:

基本上我试图使用 IN 子句来指示我想要获取数据的项目。如果我对 IN 子句中的项目进行“硬编码”,则查询速度很快,如果我使用子查询或连接来选择项目,则性能很差。

此查询在 0.15 秒内完成并返回 7382 行。

SELECT `readings`.* FROM `readings`
WHERE
  (SerialNumber IN ('091146000121', *snip 25*, '091146000556'))
AND (readings.time >= 1325404800)
AND (readings.time < 1326317400)
ORDER BY `time` ASC
Run Code Online (Sandbox Code Playgroud)

使用子查询重写以获取序列号的相同查询需要 30 多秒,并且似乎大部分时间都处于 Preparing 状态。它返回与第一个查询相同的数据。

SELECT `readings`.* FROM `readings`
WHERE
  (SerialNumber IN (SELECT `boards`.`id` AS `SerialNumber` FROM `boards` WHERE (siteId = '1')))
AND (readings.time >= 1325404800)
AND (readings.time < 1326317400)
ORDER BY `time` ASC
Run Code Online (Sandbox Code Playgroud)

子查询返回与第一个查询中相同的值,但如前所述,这需要更长的时间来运行。 它们在功能上不是等效的吗?

这是两个查询的解释:

+----+-------------+----------+-------+---------------+---------+---------+------+------+-----------------------------+
| id | select_type | table    | type …
Run Code Online (Sandbox Code Playgroud)

mysql performance subquery

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

如何使用不同的 tmp 目录与 MySQL 进行 INTO OUTFILE 选择?

我正在尝试使用 SELECT ... INTO OUTFILE 查询转储一个大表(40GB,600,000 行)。我想使用它,因为我希望我的结果以特定方式排序(因此 mysqldump 不够好)。

问题是,我收到错误代码 28。我很确定这是因为默认 /tmp 位置的磁盘空间不足。如果我可以在运行时指定用于 tmp 的位置,我在其他地方的磁盘上有足够的空间。

我发现我可以通过修改 my.cnf 来更改 tmpdir,但是我没有足够的服务器权限来修改它或重新启动 mysqld。

这里的解决方案是什么?

编辑:一些答案建议使用 mysql -e。我可能不得不走这条路并对我的文件进行后处理。我想使用 SELECT ... INTO OUTFILE 的原因是因为我想

fields   terminated by '\t'
         escaped by '\\'
lines    terminated by '\r\n' ;
Run Code Online (Sandbox Code Playgroud)

mysql mysqldump backup

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

SQL Server 事务日志初始数据加载

最初使用 5GB+ 填充数据库以避免大型事务日志时的标准流程是什么?根据我的理解,日志文件会在初始加载后跳转到较大的大小,并且从那时起磁盘空间不会减少。定期事务日志备份将释放文件中的空间,但文件仍会很大。

那么是否建议将目标数据库设置为简单备份,加载数据,使用 CHECKPOINT 截断日志,然后将数据库设置为完全备份模式?

此外,我知道可以对日志执行收缩文件操作,但有人说永远不要使用它,其他人似乎建议将其作为解决方案。有什么想法吗?

sql-server backup logs

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

备份和恢复“mysql”数据库

我使用以下命令备份一些普通数据库:

mysqldump --host=host --user=user --password=passwd --result-file=result.sql -R --single-transaction database_name
Run Code Online (Sandbox Code Playgroud)

我的问题是:我还需要转储“mysql”数据库吗?请注意,在“恢复”它们之后,我将为每个数据库创建新用户。所以我不需要用户信息的“mysql”数据库。

谢谢

mysql mysqldump backup

6
推荐指数
2
解决办法
4891
查看次数