标签: innodb

如何为列[innodb specific]选择优化的数据类型?

我正在学习数据库的数据类型的用法.

例如:

  • 哪个更适合电子邮件?varchar [100],char [100]或tinyint(开玩笑)
  • 哪个用户名更好?我应该使用int,bigint还是varchar?说明.我的一些朋友说,如果我们使用int,bigint或其他数字数据类型,它会更好(facebook会这样做).像u = 123400023指的是用户123400023,而不是user = thenameoftheuser.由于数字需要较少的时间来获取.
  • 哪个更适合电话号码?帖子(如博客或公告)?或者也许是日期(我使用日期时间)?也许有些人做了想分享的研究.
  • 产品价格(我用十进制(11,2),不知道你们的人)?
  • 或者你想到的任何其他东西,比如"我使用串行数据类型为blablabla".

为什么我要特别提到innodb?

除非您使用InnoDB表类型(请参阅第11章"高级MySQL"以获取更多信息),否则CHAR列的访问速度比VARCHAR快.

Inno db有一些我不知道的差异.我从这里读到.

mysql database database-design innodb

16
推荐指数
1
解决办法
3198
查看次数

将base64编码数据存储为BLOB或TEXT数据类型

我们有一个MySQL InnoDB表,包含~10列小base64编码的javascript文件和png(<2KB大小)图像base64编码.

相对较少的插入和大量读取,但是输出被缓存在Memcached实例上几分钟以避免后续读取.

现在我们正在使用BLOB这些列,但我想知道TEXT在性能或快照备份方面是否有转换到数据类型的优势.

我的搜索挖掘表明,BLOBTEXT我的情况接近相同的,因为我不知道前手什么类型的数据实际上将被存储我去了BLOB.

对于这个具体案例,你对TEXT vs BLOB辩论有什么指示吗?

mysql text innodb blob

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

如何在大型InnoDB表上提高DELETE FROM性能?

我有一个相当大的InnoDB表,其中包含大约1000万行(并且计数,它预计将变为该大小的20倍).每一行都不是那么大(平均每个131 B),但我不得不删除一大块,这需要很长时间.这是表结构:

 CREATE TABLE `problematic_table` (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    `taxid` int(10) unsigned NOT NULL,
    `blastdb_path` varchar(255) NOT NULL,
    `query` char(32) NOT NULL,
    `target` int(10) unsigned NOT NULL,
    `score` double NOT NULL,
    `evalue` varchar(100) NOT NULL,
    `log_evalue` double NOT NULL DEFAULT '-999',
    `start` int(10) unsigned DEFAULT NULL,
    `end` int(10) unsigned DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `taxid` (`taxid`),
    KEY `query` (`query`),
    KEY `target` (`target`),
    KEY `log_evalue` (`log_evalue`)
) ENGINE=InnoDB AUTO_INCREMENT=7888676 DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)

从表中删除大块的查询就像这样:

DELETE FROM problematic_table WHERE problematic_table.taxid …
Run Code Online (Sandbox Code Playgroud)

mysql performance innodb

16
推荐指数
2
解决办法
3万
查看次数

有没有办法检查是否在每个表的MYSQL 5.5中设置了innodb_file_per_table?

我想检查是否使用 查询为每个数据库表innodb_file_per_table设置(即.ibd创建)MYSQL-5.5.

有办法吗?

mysql innodb information-schema mysql-5.5

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

为什么我在MySQL中遇到死锁

我在MySQL表中遇到死锁.只涉及一个表,我可以一致地重现它.它只发生在我运行代码的多个线程时.

这是表格:

CREATE TABLE `users_roles` (
  `role_id` bigint(20) NOT NULL,
  `user_id` bigint(20) NOT NULL,
  `created` datetime NOT NULL,
  PRIMARY KEY (`user_id`,`role_id`),
  KEY `created` (`created`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

然后,我在每个线程中运行这两个查询,每个线程对user_id具有不同的值.

BEGIN;
DELETE FROM `users_roles` WHERE user_id = X;
INSERT INTO `users_roles` VALUES (7, X, NOW()); -- DEADLOCK ON THIS QUERY
COMMIT;
Run Code Online (Sandbox Code Playgroud)

应该注意,当调用DELETE语句时,user_id X 在数据库中永远不存在.运行这些查询的代码位用于创建新用户.但是,该功能允许我修改用户所在的帐户,并因此从旧用户的团队中删除现有角色.

因此,当足够的这些查询并行运行时,我开始遇到死锁.InnoDB状态的死锁部分在每次死锁后显示此信息.

------------------------
LATEST DETECTED DEADLOCK
------------------------
2014-05-09 16:02:20 7fbc99e5f700

*** (1) TRANSACTION:
TRANSACTION 6241424274, ACTIVE 0 sec inserting
mysql tables in use 1, …
Run Code Online (Sandbox Code Playgroud)

mysql sql deadlock innodb database-deadlocks

16
推荐指数
1
解决办法
5624
查看次数

如何解决InnoDB:无法锁定./ibdata1 mysql错误?

2016-03-14 02:30:29 58150 [错误] InnoDB:无法锁定./ibdata1,错误:35 2016-03-14 02:30:29 58150 [注意] InnoDB:检查你还没有另一个mysqld进程使用相同的InnoDB数据或日志文件.

mysql linux innodb command-line-interface

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

如何在MySQL中清理或调整ibtmp1文件的大小?

MySQL 5.7引入了一个新文件ibtmp1,用于在InnoDB中存储临时数据以提高性能.

但我注意到它的大小不断增加.在我的数据库服务器上,它的大小增加到92GB.

有没有办法减少大小或删除文件而不重新启动服务器

谢谢

mysql database innodb mysql-5.7

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

MySQL全文搜索innoDB表的解决方法

我正在设计一个使用MySQL作为后端数据库的内部Web应用程序.数据的完整性至关重要,因此我将innoDB引擎用于其外键约束功能.

我想对一种类型的记录进行全文搜索,而innoDB表本身不支持这种记录.MyISAM由于缺少外键支持,我不愿意转移到表,因为它们的锁是每个表,而不是每行.

使用MyISAM引擎创建我需要搜索的记录的镜像表并将其用于全文搜索是不是不好的做法?这样我只是在搜索数据的副本,如果这些数据发生任何变化,那么它就没那么大了,因为它总是可以重新创建.

或者这是一种应该避免的尴尬方式吗?

谢谢.

mysql search myisam innodb full-text-search

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

优化innodb表

当我在innodb表上运行优化表时,我收到此消息.是否意味着该表已经过优化,但是以不同的方式?

"table | optimize | note |表不支持优化,而是重新创建+分析而不是|"

mysql innodb

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

MySQL:列包含单词列表中的单词

我有一个单词列表.让我们说它们是'Apple','Orange'和'Pear'.我在数据库中有这样的行:

------------------------------------------------
|author_id   |  content                        |
------------------------------------------------
| 54         | I ate an apple for breakfast.   |
| 63         | Going to the store.             |
| 12         | Should I wear the orange shirt? |
------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个返回第1行和第3行的InnoDB表的查询,因为该content列包含我列表中的一个或多个单词.我知道我可以为列表中的每个单词查询一次表,并使用LIKE和%通配符,但我想知道是否有一个查询方法可用于这样的事情?

mysql sql innodb

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