所以我有这个审计表(跟踪我数据库中任何表的操作):
CREATE TABLE `track_table` (
`id` int(16) unsigned NOT NULL,
`userID` smallint(16) unsigned NOT NULL,
`tableName` varchar(255) NOT NULL DEFAULT '',
`tupleID` int(16) unsigned NOT NULL,
`date_insert` datetime NOT NULL,
`action` char(12) NOT NULL DEFAULT '',
`className` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `userID` (`userID`),
KEY `tableID` (`tableName`,`tupleID`,`date_insert`),
KEY `actionDate` (`action`,`date_insert`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Run Code Online (Sandbox Code Playgroud)
我需要开始归档过时的项目。该表已增长到大约 5000 万行,因此我可以删除行的最快方法是一次删除一个表(基于tableName)。
这工作得很好,但在一些写入繁重的表上,它不会完成。我的查询删除所有delete对 tupleID/tableName 组合具有关联操作的项目:
DELETE FROM track_table WHERE tableName='someTable' AND tupleID IN (
SELECT DISTINCT tupleID FROM track_table …Run Code Online (Sandbox Code Playgroud) 我们使用的工具要求 DB2 数据库中的特定表定义主键。
有没有办法在数据库上使用 select 语句来查看给定的表是否有一个?
谢谢。
我有一个查询运行时间特别长(15 秒以上),而且随着我的数据集的增长,它只会随着时间的推移而变得更糟。我过去对此进行了优化,并添加了索引、代码级排序和其他优化,但还需要进一步完善。
SELECT sounds.*, avg(ratings.rating) AS avg_rating, count(ratings.rating) AS votes FROM `sounds`
INNER JOIN ratings ON sounds.id = ratings.rateable_id
WHERE (ratings.rateable_type = 'Sound'
AND sounds.blacklisted = false
AND sounds.ready_for_deployment = true
AND sounds.deployed = true
AND sounds.type = "Sound"
AND sounds.created_at > "2011-03-26 21:25:49")
GROUP BY ratings.rateable_id
Run Code Online (Sandbox Code Playgroud)
该查询的目的是让我获得sound id最近发布的声音的's 和平均评分。大约有 1500 个声音和 200 万个评分。
我有几个索引 sounds
mysql> show index from sounds;
+--------+------------+------------------------------------------+--------------+----------------------+-----------+-------------+----------+--------+------+------------+————+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part …Run Code Online (Sandbox Code Playgroud) 我想知道通过OPTIMIZE TABLE tbl_name在 MySQL 服务器中运行查询可以获得哪些好处[真正实用] 。
我检查了一次,发现运行后,下一次 DB 命中需要很长时间,可能是因为片段的重定位左右,但随后的命中显示了某种性能,我不确定查询缓存是否执行此技巧单独使用优化或优化就可以做到这一点。
如果可能的话,任何人都可以指导我一些实际的性能差异值,以便我可以进一步研究,因为在我们的项目中使用 MySQL 越来越重要。
我有一个包含多个视图的模式。我需要检查执行计划以确保适当的索引到位并被使用。
我该怎么做呢?
我宁愿不必将输出复制并粘贴show create view <viewname>到 中explain,尤其是当某些视图构建在其他视图之上时,这将非常痛苦。
更新表中多行的最简单方法是什么?我有一个如下所示的 csv 文件:
|primary_key |value|
| 1 | xyz|
| 2 | abc|
| 3 | def|
...
Run Code Online (Sandbox Code Playgroud)
目标表中已存在具有这些主键的行
我想用这些值更新目标表。是否有语法,以便我可以编写如下内容:
update mytable set value = ('xyz', 'abc', 'def') where primary key = (1,2,3);
Run Code Online (Sandbox Code Playgroud)
查看MySQL 更新参考、本站点(MySQL-csv 更新)、SO(更新多行、多个数据库更新、更新多行),我怀疑答案是“否”,但我想确认这一点是真的。
有没有办法跳过二进制日志中的特定表?
我已将二进制日志配置为每晚备份之间的增量备份策略。但是我们有一个巨大的参考表,我们将每晚从批处理(70GB 表)中更新。此表仅供读取,并且每晚使用mysqlimport.
在这个仅供参考的表的更新过程中,二进制日志导致了相当严重的延迟(尤其是当我进行完整的 70GB 更新时)。基本上它必须做两次 70GB。糟糕。
参考表当前正在使用 MyISAM(我阻止 InnoDB 尝试加载它,因此尝试使用 MyISAM)。
我使用 mysqldump 进行了转储。
mysqldump -u... -p... mydb t1 > mydb_table.sql
Run Code Online (Sandbox Code Playgroud)
然后我将转储导入另一个具有相同表但不同记录的数据库中。
mysql -u...-p... mydb < mydb_tables.sql
Run Code Online (Sandbox Code Playgroud)
导入数据库有从 primary_key 1 到 1000 的记录,导出数据库有 5000 到 10,000..
但是在导入现有记录时,即 1 到 1000 被删除了..
如何??为什么??如果这是默认行为,我可以提供哪些选项来转储以免下次发生。
我试图在 mysql 中删除一个数据库,但每次我收到这个错误
ERROR 2013 (HY000): Lost connection to MySQL server during query
Run Code Online (Sandbox Code Playgroud)
甚至以 root 身份登录。
最初,我有一个无法重新创建的损坏表,因此我决定重新创建数据库。我每个表都有 innodb 文件,不确定这是否重要。
我怎样才能删除这个数据库?
我们有一个 cron 任务使用来备份我们的数据库mysqldump- 我主要担心的是损坏,没有每次手动导入和检查备份,检查/验证备份是否无损坏的最佳方法是什么?
背景:我们正在运行 mysql 5.5.* 和 InnoDB。我们mysqldump直接从服务器运行。我们目前没有使用主/从或主/主,但如果有帮助,可以更改。DB 目前小于 1mb,在可预见的未来将小于 50mb,因此在这种情况下确实不需要考虑规模。