作为一般规则,如果它们确实是确定性的,我是否应该使用 DETERMINISTIC 关键字声明所有存储过程?
在我看来,大多数存储过程都是确定性的。我认为唯一的非确定性过程是调用 RAND() 或 CURDATE() 等非确定性函数的过程是否正确?
无论如何,我问的原因是因为当我在 MySQL Workbench 中使用数据恢复功能时,我收到此错误:
ERROR 1418 (HY000) at line 1209: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
Run Code Online (Sandbox Code Playgroud)
简单地设置“log_bin_trust_function_creators=1”是更好的做法吗?请记住,我有 50 多个存储过程。
根据 SQL Server 2008 R2 的 BOL,数据类型十进制需要以下存储字节:
Precision Storage bytes
1 - 9 => 5
10-19 => 9
20-28 => 13
29-38 => 17
Run Code Online (Sandbox Code Playgroud)
但是,当我对格式为十进制 (19,5) 且值为 10999.99999 的列执行 datalength() 时,我得到了 5 个字节?根据我的理解,精度为 10 而不是 9,应该产生 9 个字节。
这导致两个问题:
具有此列的表的大小是否不取决于列定义,而是列中的真实值定义了表大小?
为什么 BOL 中的信息与 datalength() 返回的信息不匹配?
我们的一位客户的 Web 应用程序有些问题,他希望我们在 24 小时内记录所有查询。
我不知道它实际会写入多少数据。
任何 24 小时内的查询量都在 500 万左右。
我可以允许几 GB 的 ramdisk,或者挂载一个 NFS 共享位于一个未使用的 JBOD 上。
问题
如果写入日志的目的地被填满会有什么影响?
如果(专用)NFS 共享由于大量 I/O 而开始执行缓慢,是否会以任何方式(除了一般日志写入)影响 mysqld 的性能?
提前致谢,
我知道 MyISAM 和 InnoDB 引擎之间的基本区别。在 MySQL 5.6 beta 中,InnoDB 将支持全文搜索。但是,我想知道为什么以前版本的 InnobDB 不支持 FTS?我的猜测是因为表存储格式或数据索引方式。抱歉我的无知。
是否有任何程序、源代码或 API 将采用 MySQL 或 PostgreSQL 模式并吐出 UML 或其他图形可视化?
在 MySQL 中,您可以使用名为--safe-updates( --i-am-a-dummy)的功能来限制每个查询更新的行数。
http://dev.mysql.com/doc/refman/5.0/en/mysql-tips.html#safe-updates
MS SQL Server 中有这样的东西吗?
I have Mysql 5.5.18
and upon show engines:
show engines; +--------------------+---------+------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+------------------------------------------------------------+--------------+------+------------+ | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | CSV | YES | …
这是我昨天问的一个问题 - /sf/ask/1552650921/。
我得到了一个很好的答案,对我有帮助,但我不明白为什么 LEFT JOIN 比查找慢得多。LEFT JOIN 是 16 秒 - 我很确定我的表至少优化了 90% - 在进行查找时它只有 0.14 秒。当我 LEFT JOIN 表时,它并没有那么慢,为什么要查看?
我有一个source基数为 1122 的索引和一个state基数为 22 的state索引。MySQL在查询时一直使用该索引SELECT C1 FROM tbl WHERE source = 'x' and state = 'y'。这是正常的吗?如果没有,可能会出现什么问题?
执行WITH ROLLUP多字段分组时,MySQL 会为每个组返回一个汇总行,以及总体摘要:
CREATE TABLE test (name VARCHAR(50), number TINYINT);
INSERT INTO test VALUES
('foo', 1), ('foo', 1), ('foo', 2), ('foo', 3), ('foo', 3),
('bar', 1), ('bar', 2), ('bar', 2), ('bar', 2), ('bar', 3),
('baz', 1), ('baz', 2), ('bar', 2);
SELECT name, number, COUNT(1) FROM test GROUP BY name, number WITH ROLLUP;
+------+--------+----------+
| name | number | count(1) |
+------+--------+----------+
| bar | 1 | 1 |
| bar | 2 | 3 |
| bar | …Run Code Online (Sandbox Code Playgroud) mysql ×9
myisam ×2
datatypes ×1
determinism ×1
graph ×1
group-by ×1
index ×1
innodb ×1
join ×1
mysql-5 ×1
mysql-5.5 ×1
performance ×1
postgresql ×1
sql-server ×1
ubuntu ×1
view ×1