我是 MySQL 的新手,我想知道:
如何utf-8像在 navicat 中那样创建带有字符集的数据库?
create mydatabase;
Run Code Online (Sandbox Code Playgroud)
...似乎正在使用某种默认字符集。
我忘记了上次是如何启动 PostgreSQL 的(那是几个月前),我不记得数据目录位于何处。该postgres命令似乎需要数据目录的位置。
如果有帮助,我在 MacOsX 上。
/usr/local/postgres 在我的 Mac 上不存在。
使用下面提供的答案,我发现它在这里:
/usr/local/var/postgres
Run Code Online (Sandbox Code Playgroud) 关于两者之间的差异,有一个很长且相当清晰的答案
TIMESTAMP WITH TIME ZONE
-vs-TIMESTAMP WITHOUT TIME ZONE在 SO post Ignoring time zone together in Rails and PostgreSQL 中可用。
我想知道的是:实际使用是否有任何有效的用例,TIMESTAMP WITHOUT TIME ZONE或者应该将其视为反模式?
我是 Oracle 菜鸟,我的目的是将所有数据和元数据从一个架构传输到 Oracle 数据库中的另一个架构。我打算使用数据泵expdp和impdp命令。我对此有疑问:
expdp和impdp命令吗?这是首选方法吗?该语句是否从模式中获取所有对象(数据和元数据)并将它们移动到不同的模式中?
expdp \"/ as sysdba\" schemas=<schemaname> directory=dumpdir dumpfile=<schemaname>.dmp logfile=expdp_<schemaname>.log
Run Code Online (Sandbox Code Playgroud)
那么目标模式是impdp命令后源模式的精确副本吗?
我继承了一个数据库,并希望对其进行清理和加速。我有一个包含 30,000,000 行的表,其中许多是由于我们程序员的错误而插入的垃圾数据。在添加任何新的、更优化的索引之前,我将表从 MyISAM 转换为 InnoDB,并希望删除大量包含垃圾数据的行。
数据库是 MySQL 5.0,我有服务器的 root 访问权限。我首先通过 Adminer 运行这些命令,然后通过 phpMyAdmin 运行,结果相同。
我正在运行的命令是,
DELETE
FROM `tablename`
WHERE `columnname` LIKE '-%'
Run Code Online (Sandbox Code Playgroud)
本质上,删除此列中以 dash 开头的任何内容-。
它运行了大约 3-5 分钟,然后当我查看进程列表时,它消失了。
然后我跑,
SELECT *
FROM `tablename`
WHERE `columnname` LIKE '-%'
Run Code Online (Sandbox Code Playgroud)
它返回数百万行。
为什么我的删除语句没有完成?
PS,我知道 MySQL 5.0 已经过时了。我正在将数据库移动到 MySQL 5.6 w InnoDB(可能是 MariaDB 10 w XtraDB),但在此之前,我希望按原样使用 DB 来回答这个问题。
——
编辑已删除,请参阅我的答案。
SQL Server Quantum (4 ms) 如何与 Server OS Quantum(通常:187.5 ms)同步?
在使用 184 ms 的 OS 量程后(对应于 46 个完整的 SQL 量程),OS 量程有 3.5 ms 的时间,然后它必须将调度移交给不同的进程。SQL 操作系统启动一个时间段(4 毫秒),在 3.5 毫秒后,操作系统时间段决定停止当前的 SQL 操作系统线程,该线程在它产生计划之前还有 0.5 毫秒。现在会发生什么?
在接下来的几节中,我将写出迄今为止我所发现的关于 OS 量程以及如何计算量程的持续时间。操作系统“量子”的持续时间基于“滴答”,而“滴答”本身的持续时间基于“时钟间隔”,通常为 15.625000 毫秒。但是让我详细说明一下......
在博客文章Know Thy Tick 中,作者 Jim 解释了时钟间隔(又名“滴答”)的基础知识以及它们的用途。
当我读到诸如“时钟间隔……对于大多数 x86 多处理器大约为 15 毫秒”之类的内容时,我不得不确定我的时钟或“滴答”间隔的值。幸运的是,我在书中读到了这句话,Windows Internals第四版提供了一个参考来帮助我解决我的痛苦。... 上述书籍的作者 Mark Russinovich 慷慨地在其网站上提供了ClockRes实用程序。运行此实用程序,我能够确定我的 x86 多处理器 PC 上的时钟间隔为 15.625000 毫秒。有趣,但我好奇的头脑想知道更多。
当然,tick 间隔重要的真正原因是它会影响线程调度。Windows 调度程序在允许另一个具有相同优先级的任务运行之前,为每个线程提供一个“时间”来执行。调度程序分配给线程的量程是滴答间隔的倍数。为特定线程选择的特定量子值有点超出我想在本文中讨论的内容。
好的,所以我知道什么是量子,但不知道量子将运行多长时间。 …
我有一个对数据库具有以下权限的 SQL 帐户:

db_executor您看到此帐户所属的角色是由以下脚本创建的:
CREATE ROLE [db_executor] AUTHORIZATION [dbo]
GO
GRANT EXECUTE TO [db_executor]
GO
Run Code Online (Sandbox Code Playgroud)
当我运行一个select,update,insert或delete放在桌子上,它工作正常。当我尝试truncate桌子时,它给了我这个错误信息:
找不到对象“TableName”,因为它不存在或您没有权限。
此帐户缺少什么权限?
在 Microsoft SQL Server 2012 上激活 FILESTREAM 功能后,SQL Server 将在系统上创建“隐藏”共享。份额定义如下:
Sharename FILESTREAM_SHARE
Path \\?\GLOBALROOT\Device\RsFx0320\<localmachine>\FILESTREAM_SHARE
Remark SQL Server FILESTREAM share
Maximum users unlimited
Users Caching Manual caching of documents
Permissions NT-AUTHORITY\Authenticated Users, FULL
Run Code Online (Sandbox Code Playgroud)
该名称是您在SQL Server 配置管理器中最初配置 FILESTREAM 时提供的共享名称。但它是为了什么?
我通读了所有可用的 FILESTREAM 文档,从以下位置开始:
sql-server-2008 sql-server database-internals sql-server-2012 filestream
我有一个服务器和几个客户端应用程序。必须先启动服务器,然后才能启动客户端。如果它们不存在,客户端然后在数据库中创建表。
当服务器启动时(某些表不存在)并且以下查询给了我一个exception:
UPDATE recipes SET lock = null
WHERE lock IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)
Relation >>recipes<< does not exists
我想exception通过检查此表是否存在来避免这种情况。
UPDATE recipes SET lock = null
WHERE lock IS NOT NULL AND
WHERE EXISTS (
SELECT 1
FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name = 'recipes'
);
Run Code Online (Sandbox Code Playgroud)
但这query不起作用。你能告诉我我的错误在哪里吗?
在对慢查询进行调查期间,执行计划似乎异常次优(嵌套循环执行了 900 万次执行搜索,其中估计执行次数为 1)。在确认了一些确实过时的相关统计数据后,我重建了统计数据并且性能问题得到了有效解决。
此数据库启用了自动更新统计信息(默认情况下启用)。我知道有一个基于 20% + 500 行修改(更新/插入/删除)的自动统计更新阈值。多个索引似乎已在很大程度上超过了此阈值,因此似乎存在 (A) 自动更新问题或 (B) 更新策略比我在网上找到的更多文档。
我很欣赏可以设置计划任务来更新统计信息,如果找不到其他解决方案,这可能是我们采取的方法,但它确实让我们感到困惑,为什么如此大量的修改不会触发某些统计数据的自动更新 - 了解为什么可能会帮助我们决定哪些统计数据需要由计划任务更新。
一些补充说明:
在负载测试创建数据的数据库中注意到了该问题,因此在短时间内添加了大量数据,因此如果自动更新定期发生(例如,最多一天一次)那么这可以解释一些观察到的行为。此外,我们的负载测试往往会给数据库带来很大的压力,因此我想知道 SQL 是否在负载很重时推迟了统计信息更新(随后由于某种原因不更新统计信息)。
在尝试使用包含连续 INSERT、SELECT 和 DELETE 语句的测试脚本重新创建此问题时,问题并未发生。我想知道这里的区别是否是这些语句每个都会影响每个 SQL 语句的许多行,而我们的负载测试脚本倾向于单独插入行。
有问题的数据库设置为“简单”恢复模式。
一些相关链接:
我也通过微软连接提出了这个问题:
更新 2011-06-30:
在进一步调查中,我相信超出阈值级别(例如 500 行 + 20%)的统计数据是问题查询未使用的统计数据,因此它们可能会在查询运行时更新这需要他们。对于该统计数据是通过查询中使用,这些被定期更新。剩下的问题是,仅在相对较少的插入之后,这些统计数据就会严重误导查询计划优化器(例如,在估计数量为 1 的情况下导致上述 900 万次左右的搜索)。
我此时的预感是问题与主键选择不当有关,键是使用 NEWID() 创建的唯一标识符,因此这会很快创建高度碎片化的索引 - 特别是作为 SQL 中的默认填充因子服务器是 100%。我的预感是,在相对较少的行插入后,这会以某种方式导致误导性统计数据 - 低于重新计算统计数据的阈值。这可能都不是问题,因为我已经生成了大量数据而没有中途重建索引,因此糟糕的统计数据可能是由此产生的非常高的索引碎片的结果。我想我需要将 SQL Server 维护周期添加到我的负载测试中,以便更好地了解真实系统长时间内的性能。
更新 2012-01-10:
另一个需要考虑的因素。SQL Server 2005 中添加了两个跟踪标志(并且似乎在 2008 年仍然存在)以解决与出现过时和/或误导性统计数据相关的特定缺陷。有问题的标志是:
DBCC TRACEON(2389)
DBCC TRACEON(2390)
Run Code Online (Sandbox Code Playgroud)
MSDN:Ian Jose 的 WebLog:升序键和自动快速更正统计 数据,Fabiano Amorim
在决定启用这些标志时,您当然应该非常小心,因为它们可能会产生不利影响。
sql-server ×4
postgresql ×3
mysql ×2
collation ×1
delete ×1
expdp ×1
export ×1
filestream ×1
impdp ×1
innodb ×1
mac-os-x ×1
myisam ×1
mysql-5.0 ×1
oracle ×1
performance ×1
permissions ×1
schema ×1
timestamp ×1
truncate ×1
utf-8 ×1