标签: innodb

我是对的,InnoDb比MyISAM更适合频繁的并发更新和插入吗?

我们的网站每天有数百名访问者,每天有数万个查询.因此,数据库中的一些表很少更新,一些表每分钟更新几次,一些表更新〜每秒10次.
MyISAM使用表级锁定进行更新,InnoDb使用行级锁定.
因此,据我所知,对于频繁并发更新的表(每秒多次更新),最好将它们设为InnoDb,对于其他表(如果我们当然不需要事务和外键),可以使用MyISAM引擎.
我的想法是对的吗?

mysql database myisam innodb locking

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

如果未在my.cnf中指定,innodb_data_file_path的默认设置是什么?

如果未在my.cnf中指定,innodb_data_file_path的默认设置是什么?

当我尝试在12GB充满图片的桌子上执行以下命令时

alter table `rails_production`.`pictures` change `data` `image_file_data` mediumblob NULL;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

ERROR 1114 (HY000): The table '#sql-7fe4_12c9' is full
Run Code Online (Sandbox Code Playgroud)

我读了另一个StackOverflow问题链接文本,建议我将我的设置更改为以下内容

innodb_data_file_path = ibdata1:10M:autoextend:max:512M
Run Code Online (Sandbox Code Playgroud)

当我查看my.cnf时,我注意到我没有innodb_data_file_path的任何设置,我想知道默认值是什么?

mysql innodb

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

膨胀的innodb数据文件(ibdata1)以及如何回收空间?

我的表中有大约12GB的数据,而我的数据文件ibdata1的大小约为12GB.然后我运行以下命令

alter table `rails_production`.`pictures` change `data` `image_file_data` mediumblob NULL
Run Code Online (Sandbox Code Playgroud)

当它正在制作表的临时副本时,我收到以下错误

ERROR 1114 (HY000): The table '#sql-7fe4_12c9' is full
Run Code Online (Sandbox Code Playgroud)

我认为这意味着没有足够的空间来制作表的临时副本.但现在数据文件是17GB!如何回收数据文件中的空间?

有没有办法检查17GB的使用量是多少?

mysql innodb

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

查找表的最佳mysql表类型(重读,无写)

我有一个ip-to-country查找表.此表每月更新一次,同时非常频繁地阅读.我现在把它作为innodb.这是一个几乎只能从中读取的表的最佳表类型?

提前致谢.

mysql database-design myisam innodb

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

InnoDB和MyISAM之间的区别?

可能重复:
MyISAM与InnoDB

好的,我读过维基百科和InnoDB的这些信息似乎更好.这是我的问题是否可以使用InnoDB而不是MyISAM从数据库中选择用户数据?或者与MyISAM保持联系会更好.

如果我要改为Inno PDO仍然可以使用它和一些旧式查询?

$q = ("SELECT * ... );
$r = mysql_query($q);
Run Code Online (Sandbox Code Playgroud)

mysql myisam innodb

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

MyISAM或InnoDB用于大多数写表

我有一张桌子,每秒可以接收大约50个插页.现在有700k记录,使用160 MiB.我的小VPS与1公斤的公羊正在跟上,但几乎没有.

我之所以选择InnoDB,就像人们说"它扩展得更好",不那么频繁地腐败并实现行锁定而不是表锁定.

但这是正确的选择吗?

我也读过MyISAM支持延迟插入,这可能非常有趣.(我想知道表锁定的权衡取舍)

mysql myisam innodb storage-engines

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

在MySQL innodb中创建具有多个字段的外键约束

我有两张桌子:发票和invoice_items.我需要两者之间的一对多关系与级联删除(所以如果发票被删除,项目也会被删除).

发票上的主键跨越两列:invoice_number,vendor_number

invoice_items上的主键跨越三列:invoice_number,vendor_number,item_number

如何使用invoice_number&vendor_number列向invoice_items表添加外键约束?

我尝试过这个并没有用:

ALTER TABLE `invoice_items`
ADD FOREIGN KEY (`invoice_number`,`vendor_number`)
REFERENCES `invoices`(`invoice_number`,`vendor_number`) ON DELETE CASCADE;

ERROR 1005 (HY000): Can't create table 'test_db.#sql-12c8_db1ad' (errno: 150)
Run Code Online (Sandbox Code Playgroud)

以下是表定义:

CREATE TABLE IF NOT EXISTS `invoices` (
  `vendor_number` varchar(20) NOT NULL,
  `invoice_number` varchar(20) NOT NULL,
  `po_number` varchar(50) NOT NULL,
  `inbound_message_id` int(11) NOT NULL,
  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`vendor_number`,`invoice_number`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `invoice_items` (
  `vendor_number` varchar(20) NOT NULL,
  `invoice_number` varchar(20) NOT …
Run Code Online (Sandbox Code Playgroud)

mysql sql innodb foreign-keys

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

为什么几乎所有数据库都没有实现行缓存?

我注意到几乎所有数据库都没有在内部实现行缓存.我问这个问题是因为我发现有人为innodb添加了行缓存补丁.至少,它具有超越性能增益的一个优点,即它对客户端是透明的.

是否有任何困难的技术原因阻止这样做,或者仅仅因为它对非常具体的访问模式有用?

谢谢

java mysql database database-design innodb

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

MyISAM与InnoDB在一个非常大的表中

我有一张非常简单的桌子

CREATE TABLE IF NOT EXISTS `largecache` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `tooltip` varchar(255) NOT NULL,
  `name` varchar(100) NOT NULL,
  `attributes` text NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `tooltip` (`tooltip`)
) ENGINE=InnoDB
Run Code Online (Sandbox Code Playgroud)

大约有800万个条目几乎完全用于读取.我正在努力确保尽快访问数据.我目前正在使用InnoDB,是否值得切换到MyISAM?我唯一关心的是读取性能.此外,我可以使用任何其他建议加速,因为数据库读取几乎是我应用程序中唯一的瓶颈.

我正在使用MySQL客户端版本:5.1.47

谢谢.

[编辑:更多细节]我正在使用php,我正在查询基于工具提示字段的完全匹配.它被托管在一个共享的VPS上,有1个内存,我可以尝试对mysql进行任何调整,但我知道mysql调整是一个非常复杂的问题.

示例查询:

select * from largecache where `tooltip` = "Cm8IuIyq9QMSBwgEFS0iGWAd30SUNR2EHJ0nHYYCY-odxZ6okR0pEnPgHWzQbvIiCwgBFXZCAwAYCCAiMAk4_gNAAEgPUBBg_gNqJQoMCAAQvKHZ5oCAgIA6EhUIrcC1xggSBwgEFUn1i18wCTgAQAEY2ojJgQxQAlgA"
Run Code Online (Sandbox Code Playgroud)

我确实安装了APC,但没有安装memcached

mysql database myisam innodb relational-database

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

MySQL行级锁

我不确定行级别锁如何工作但这里是我的问题我有一个表T(id int,balance int)(engine = InnoDB)我想要锁定ID = 1的行,所以我开始像这个 :

start transaction ; 
select * from T where ID = 1 FOR UPDATE ; 
Run Code Online (Sandbox Code Playgroud)

在发送提交之前,我想尝试确实行是否已锁定.所以我开始了另一个会话并输入:

UPDATE T set balance = balance  + 100 where ID = 1 ;
Run Code Online (Sandbox Code Playgroud)

在这里,我清楚地看到我在等待锁定(30秒后超时).

但是当我键入:

UPDATE T set balance = balance  + 8500 where ID = 2 ;
Run Code Online (Sandbox Code Playgroud)

我也在等待锁定,那么我怎样才能锁定ID = 1行而不是完全锁定表格?

mysql database innodb transactions locks

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