我是个新手,我在任何地方都找不到这样做的好方法。我有一个数据库表,其中包含在一周内不同时间记录的统计信息。报告周从星期四开始。该表包含一个日期戳列(日期),用于存储数据的记录时间。
我需要提取给定周的数据(报告周从周四开始)。我编写了以下查询:
SELECT *
FROM `table`
WHERE 1 = CASE
WHEN WEEKDAY(NOW()) = 0 THEN DATEDIFF(NOW(),`date`) BETWEEN -2 AND 4
WHEN WEEKDAY(NOW()) = 1 THEN DATEDIFF(NOW(),`date`) BETWEEN -1 AND 5
WHEN WEEKDAY(NOW()) = 2 THEN DATEDIFF(NOW(),`date`) BETWEEN -0 AND 6
WHEN WEEKDAY(NOW()) = 3 THEN DATEDIFF(NOW(),`date`) BETWEEN -6 AND 0
WHEN WEEKDAY(NOW()) = 4 THEN DATEDIFF(NOW(),`date`) BETWEEN -5 AND 1
WHEN WEEKDAY(NOW()) = 5 THEN DATEDIFF(NOW(),`date`) BETWEEN -4 AND 2
WHEN WEEKDAY(NOW()) = 6 THEN DATEDIFF(NOW(),`date`) BETWEEN -3 AND 3 …Run Code Online (Sandbox Code Playgroud) 我已经升级到 MySQL 5.5 版。在那里,我在模式列表中观察到了 performance_schema。
我最近参加了 Facebook MySQL 工程师的演讲,他在那里提到使用FORCE INDEX减少 I/O。
这与 MySQL 查询优化器有关,无需访问数据字典并进行计算。
我对一个免费且简单的 MySQL 工具感兴趣,它可以在创建数据库通用模式时提供在线协作功能。你知道任何?
我目前正在阅读CJ Date 的“SQL 和关系理论”。虽然我在书中讲得很远,但我还是有一些基本问题。我想知道“逻辑差异”这个词是什么意思,这本书确实试图用例子解释这个词,但并没有真正解释它的意思(或者我可能理解错了??)
这是书中的一小部分:
我说过关系和关系的图片之间存在逻辑差异。逻辑差异的概念源自维特根斯坦的格言:
我直观地知道逻辑差异意味着什么,我知道关系和关系图片之间的区别是什么。我想要的是“逻辑差异”概念的正式定义,所以我很清楚它的含义。
从 MySQL 5.1 开始,数据不再需要完全在内存中。
我读过索引列(我认为整个索引结构)必须仍在内存中(MySQL High Availability,2010,第 533 页,“MySQL Cluster 将所有索引列保留在主内存中”)。
鉴于此,如果没有足够的内存(即,一个巨大的数据库(> 100GB 或 1TB),在具有低内存配置的服务器上运行(例如,2 个数据节点,每个节点具有 1GB 的 RAM))会发生什么情况?
我们公司的服务器目前托管在 VPS 上,我们决定迁移到专用服务器。
在为数据库服务器选择最佳硬件时,我们应该投入更多资源:更好的 CPU(更多内核)?或更多的内存?
最佳投资回报率在哪里?
有什么建议?
我有一个users包含用户信息的表和一个credits经常更新的列。
在索引页面上,我显示了具有基本用户信息的用户列表,但我不需要积分。
在详细信息页面上,我还显示了用户信息的积分。
两个主要操作在项目中密集。第一个操作是SELECT对索引页的操作。第二个操作是UPDATE对 credits 列的操作。credits列没有被索引,但由于它经常更新,它会影响表上的索引列users吗?如果是这样,我认为我应该将credits列作为表分开,并仅在需要时才加入。这样做,我可以提高SELECT索引页的性能吗?
另外,我正在使用 MySQL。对于经常更新的列,我应该使用什么样的表结构?
再会。
我知道这可能是其他问题的重复,但是我已经在许多线程中应用了所有建议,但我仍然遇到同样的问题。
我有一个使用 max 的存储过程3 tables。当我运行该程序时,只30% of my CPU使用了大约25% of RAM.
我坐在一个CPU with 4 cores and 16GB RAM.
my.ini 如下所示:
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 512M
max_allowed_packet = 32M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 128M
thread_cache_size = 16
query_cache_size= 32M
thread_concurrency = 0
log-bin=mysql-bin
binlog_format=mixed
server-id = 1
innodb_buffer_pool_size = 12G …Run Code Online (Sandbox Code Playgroud) 过去几天我们一直在努力解决一个问题。我们要为一个有60M记录的大表添加索引。起初我们尝试使用基本的 mysql 语法添加它。但它堵塞了我们的生产数据库。该表在生产查询中使用非常频繁。所以一切都受苦了。
我们的数据库托管在 AWS RDS 上。它的Mysql 5.7。我们使用 Laravel 作为 PHP 框架
我们读到的下一件事是,我们可以将当前表复制到新表中。然后为新表添加索引。然后移动 laravel 模型以使用新表。我们认为这是有道理的,而且很容易
但是将表数据从一个表复制到新表需要花费相当多的时间。我们的计算表明这需要几天的时间。我们尝试使用 Laravel 以及 SQL 命令。但无论哪种方式都太慢了。
然后我们尝试将数据导出为 CSV 并导入,但还是太慢了。前几百万条记录插入速度很快,但随后表的插入速度会变得非常慢。
最后我们尝试了mysqldump,我们意识到它在插入时也会锁定新表,所以也许这就是它足够快的原因。将表格复制到新表格大约花了 6 个小时。但是我们在这个方法中丢失了 2M 条记录。我们还检查了导出/导入时有多少记录进入现有表,只有大约 100K。因此导出/导入丢失了 190 万条记录,我们无法找出原因。
在经历了所有这些不同的方法之后,我们决定让应用程序停机并在巨大的表上添加索引
我想知道其他人也面临这个问题吗?有没有办法在一个巨大的表上添加索引而不导致生产停机?或者有没有更快的方法来复制大的 mysql 表而不丢失数据?
mysql ×8
index ×2
performance ×2
schema ×2
amazon-rds ×1
innodb ×1
mariadb ×1
memory ×1
mysql-5.7 ×1
ndbcluster ×1
optimization ×1
tools ×1
wamp ×1