传统观点认为存储过程总是更快.所以,因为他们总是更快,使用它们所有的时间.
我很确定这是基于历史背景,曾经是这种情况.现在,我并不主张不需要存储过程,但我想知道在现代数据库(如MySQL,SQL Server,Oracle或< Insert_your_DB_here >)中存储过程在什么情况下是必需的.通过存储过程进行ALL访问是否过度?
我想sql.gz用SSH 将文件插入我的数据库.我该怎么办?
例如,我有一个名称为电话号码的数据库numbers.sql.gz,这种类型的文件是什么以及如何将此文件导入我的数据库?
我想存储我在"实体"表上所做的更改.这应该像一个日志.目前它在MySQL中使用此表实现:
CREATE TABLE `entitychange` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`entity_id` int(10) unsigned NOT NULL,
`entitytype` enum('STRING_1','STRING_2','SOMEBOOL','SOMEDOUBLE','SOMETIMESTAMP') NOT NULL DEFAULT 'STRING_1',
`when` TIMESTAMP NOT NULL,
`value` TEXT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)
entity_id=我entity桌子的主键.entitytype= entity表中更改的字段.有时只改变一个字段,有时多个.一个变化=一排.value =字段"新值"的字符串表示形式.将Field entity.somedouble从3 更改为2 时的示例,我运行这些查询:
UPDATE entity SET somedouble = 2 WHERE entity_id = 123;
INSERT INTO entitychange (entity_id,entitytype,value) VALUES (123,'SOMEDOUBLE',2);
Run Code Online (Sandbox Code Playgroud)
我需要select更改过去15天的特定实体和实体类型.例如:最后15天内最后一次更改SOMEDOUBLE为entity_id 123.
现在,有两件事我不喜欢:
TEXT- 虽然大多数(小于1%)不是真正的文本,但就我而言,大多数值都是DOUBLE.这是一个大问题吗? …mysql database-design temporal-database database-partitioning entity-attribute-value
我循环遍历许多值(例如1到100)并在循环内执行预准备语句.
使用事务是否有优势 - 在循环结束后提交 - 与循环内的直接执行相比?
这些值不是相互依赖的,因此从这个角度来看不需要事务.
因此,出于开发目的,我需要一个包含大约 100 万到 1 亿个值的表,我当前的方法一点也不快。
开发人员通常会做什么来让他们的表拥有数百万行来测试他们的程序处理它们的速度?
我当前的方法有 10 个 for 循环,但对于我需要的行数来说,它真的很慢。
那么我该怎么做才能快速插入数百万行?在这种情况下,专业开发人员会做什么?