首先我要说的是,我已经查看了许多类似的问题,但所有这些问题都Timestamp与DateTime字段类型有关而没有索引.至少这是我的理解.
众所周知,DateTime有一些优势.把它们放在一边了一分钟,并假设表的引擎是InnoDB用10+ million records,它查询将更快地执行时标准基于:
- 带索引的DateTime
- 带索引的int
换句话说,最好将日期和时间存储为DateTimeUNIX时间戳int?请记住,不需要使用任何内置的MySQL函数.
更新
经过MySQL 5.1.41(64位)和1000万条记录的测试,初步测试显示出显着的速度差异int.使用两个表,tbl_dt使用DateTime和tbl_int使用int列.几个结果:
SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_dt`;
+----------+
| COUNT(*) |
+----------+
| 10000000 |
+----------+
1 row in set (2 min 10.27 sec)
SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_int`;
+----------+
| count(*) |
+----------+
| 10000000 |
+----------+
1 row in set (25.02 sec)
SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_dt` WHERE …Run Code Online (Sandbox Code Playgroud) 在安装过程中,Magento会产生以下错误:
数据库服务器不支持InnoDB存储引擎.
我已经修复了Magento的所有依赖项,并使用SHOW ENGINES在命令行上使用MySQL进行了双重检查,并且肯定有InnoDB可用(也是默认的存储引擎).
这不是访问MySQL配置的问题,其他人可能已经在安装时看到了这一点.
注意:这是在Mac Pro上运行的(我正在开发的域名使用简单的主机DNS重写).
在我提出一个问题之前:我正在使用MySQL 5.5数据库的MySQL Workbench 6.1从一台机器到另一台机器上的5.6进行数据导出/导入.这两台机器都是ubuntu,其中一台是32位而另一台是64位.
我转储数据没有问题,但当我尝试加载它时,我得到:
ERROR 1118(42000)在第1807行:行大小太大(> 8126).将某些列更改为TEXT或BLOB或使用ROW_FORMAT = DYNAMIC或ROW_FORMAT = COMPRESSED可能会有所帮助.在当前行格式中,760字节的BLOB前缀以内联方式存储.
这是表创建:
CREATE TABLE `file_content` (
`fileid` bigint(20) NOT NULL,
`content` LONGBLOB NOT NULL,
PRIMARY KEY (`fileid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)
我有以下相关的my.cnf设置...
max_allowed_packet = 1G
innodb_file_per_table = 1
innodb_file_format = Barracuda
我花了很多谷歌搜索时间试图找出问题所在.顺便说一句,如果我删除主键(这里没问题,但另一个表有外键的表抱怨.
幸运的是,我有ssh访问框,所以我可以看到实际的mysqldb.log.为什么我发现真的很有意思......
2014-08-12 20:42:12 25246 [错误] InnoDB:总blob数据长度(14179167)大于重做日志文件大小(3072)的10%.请增加innodb_log_file_size.
因此,将重做日志文件大小增加到10x LONGBLOB大小修复了我的问题.但这是否意味着要插入1G LONGBLOB(因为数据包大小而实际最大值),我将需要一个10G innodb_log_file_size.
任何人都可以解释"重做日志大小错误"如何变成"行大小太大(> 8126)"错误.
顺便说一下,我无法控制这个数据库的结构,所以没有"你为什么要在数据库中存储大的blob".
TIA
在我们的生产数据库中,我们运行以下每小时运行的伪代码SQL批处理查询:
INSERT INTO TemporaryTable
(SELECT FROM HighlyContentiousTableInInnoDb
WHERE allKindsOfComplexConditions are true)
Run Code Online (Sandbox Code Playgroud)
现在这个查询本身并不需要很快,但我注意到它是锁定的HighlyContentiousTableInInnoDb,即使它只是从它读取.其他一些非常简单的查询需要大约25秒(这是其他查询需要多长时间).
然后我发现在这种情况下InnoDB表实际上是被SELECT锁定的!http://www.mysqlperformanceblog.com/2006/07/12/insert-into-select-performance-with-innodb-tables/
但我真的不喜欢选择OUTFILE的文章中的解决方案,它似乎是一个黑客(文件系统上的临时文件看起来很糟糕).还有其他想法吗?有没有办法制作InnoDB表的完整副本,而不会在复制过程中以这种方式锁定它.然后我可以将其复制HighlyContentiousTable到另一个表并在那里进行查询.
我一直在研究一个问题几天了.我们的本地mediawiki页面位于我们的盒子帐户上,自行销毁,我们一直致力于将其联机.使用XAMPP控制面板v3.2.1,错误很多,所以我们决定更新XAMPP(v3.2.2)并将'htdocs'和'mysql/data'文件移到新的数据库中.
第一个错误:
9:50:21 AM [mysql] Attempting to start MySQL app...
9:50:22 AM [mysql] Status change detected: running
9:50:22 AM [mysql] Status change detected: stopped
9:50:22 AM [mysql] Error: MySQL shutdown unexpectedly.
9:50:22 AM [mysql] This may be due to a blocked port, missing dependencies,
9:50:22 AM [mysql] improper privileges, a crash, or a shutdown by another method.
9:50:22 AM [mysql] Press the Logs button to view error logs and check
9:50:22 AM [mysql] the Windows Event Viewer for more clues …Run Code Online (Sandbox Code Playgroud) 我们有一组表,其中包含元级别数据,如组织,组织用户,组织部门等.所有这些表都将被阅读,只需很少的写操作.此外,表格大小非常小(最大记录数量约为30K - 40K)
另一组表存储OLTP数据,如账单交易,用户操作等,这些数据将同时读写.这些表格非常庞大(每张表约3000万条记录)
对于第一组表,我们计划使用MyISAM,第二组使用InnoDb引擎.我们的许多功能还需要来自这两组的桌子上的JOINS.
使用InnoDB表加入MyISAM表时是否存在任何性能问题?此外,还有任何其他可能的问题(数据库备份,调整等),我们可能会遇到这种设计?
任何反馈将不胜感激.
使用MySQL 5.1.49,我正在尝试实现一个标记系统我遇到的问题是带有两列的表:id(autoincrement),tag(unique varchar) (InnoDB)
使用查询时,即使忽略插入INSERT IGNORE INTO tablename SET tag="whatever",自动增量id值也会增加.
通常这不会是一个问题,但我希望很多可能的尝试为这个特定的表插入重复项,这意味着我id的新行的字段的下一个值将跳得太多.
例如,我最终会得到一张表3行但不好id的表
1 | test
8 | testtext
678 | testtextt
Run Code Online (Sandbox Code Playgroud)
此外,如果我不这样做INSERT IGNORE并且只是定期INSERT INTO处理错误,则自动增量字段仍会增加,因此下一个真正的插入仍然是错误的自动增量.
如果有INSERT重复的行尝试,有没有办法停止自动增量?
正如我对MySQL 4.1的理解,这个值不会增加,但我想做的最后一件事是要么SELECT提前做很多语句来检查标签是否存在,或者更糟糕的是,降级我的MySQL版本.
我有MySQL的这个错误日志,任何想法?网站工作了一段时间,然后我在几个小时后完全关闭了MySQL.
140919 10:48:27 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
140919 10:48:27 [Note] Plugin 'FEDERATED' is disabled.
140919 10:48:27 InnoDB: The InnoDB memory heap is disabled
140919 10:48:27 InnoDB: Mutexes and rw_locks use GCC atomic builtins
140919 10:48:27 InnoDB: Compressed tables use zlib 1.2.3.4
140919 10:48:28 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
140919 10:48:28 InnoDB: …Run Code Online (Sandbox Code Playgroud) 我在INNODB表中有大约20,000行称为'cards',所以FULLTEXT不是一个选项.
请考虑此表:
id | name | description
----------------------------------------------------------
1 John Smith Just some dude
2 Ted Johnson Another dude
3 Johnathan Todd This guy too
4 Susan Smith Her too
5 Sam John Bond And him
6 John Smith Same guy as num 1, another record
7 John Adams Last guy, promise
Run Code Online (Sandbox Code Playgroud)
因此,假设用户搜索"John",我希望结果集的顺序为:
7 John Adams
6 John Smith
3 Johnathan Todd
5 Sam John Bond
2 Ted Johnson
Run Code Online (Sandbox Code Playgroud)
请注意,我们只拉了一次'John Smith',我们最近参加了他的录取.由于我的数据,所有名字都是针对同一个人,不需要担心两个名叫John Smith的人.想法?如果我能澄清任何事情,请告诉我.