InnoDB和MyISAM有什么区别.我能找哪一个?任何提供的区域和其他提供的区域?这两种类型都有技术限制吗?请帮我为我的项目选择合适的类型?
我们有一个用于存档旧数据的大型 MyISAM 表。这种归档每月执行一次,除了这些情况外,数据永远不会写入表中。无论如何要“告诉” MySQL 该表是只读的,以便 MySQL 可以优化从该表读取的性能?我看过 MEMORY 存储引擎,但问题是这个表太大了,它会占用服务器内存的很大一部分,这是我不想要的。
希望我的问题足够清楚,在数据库管理方面我是新手,因此欢迎任何输入或建议。
我正在尝试在我们的服务器上为我的最新项目安装Magento Community Edition,但是,我们当前使用的托管平台没有,也不会让我们安装或使用InnoDB.
是否有人知道可以通过任何其他方式进行任何配置/更改?
There is a structure:
CREATE TABLE IF NOT EXISTS `categories` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`parent_id` int(11) unsigned NOT NULL DEFAULT '0',
`title` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Query_1:
SELECT * FROM `categories` WHERE `id` = 1234
Query_2:
SELECT * FROM `categories` WHERE `id` = 1234 LIMIT 1
Run Code Online (Sandbox Code Playgroud)
我需要得到一排.由于我们应用WHERE id=1234(通过PRIMARY KEY查找)显然id = 1234的行在整个表中只有一行.
MySQL找到该行后,是否引擎在使用Query_1时继续搜索?
提前致谢.
想象有2个表,第一个是产品(产品)列表,第二个是产品和另一个表(类别)之间的连接表,称为产品类别
产品:
id | name
------------
1 Lorem
2 Ipsum
3 Dolor
4 Sit
Run Code Online (Sandbox Code Playgroud)
产品类别
product_id | categories_id
---------------------------
1 3
1 6
4 1
2 2
Run Code Online (Sandbox Code Playgroud)
如何获取孤立元素,我的意思是没有类别的元素,所以在这种情况下:3,使用 MyISAM 以有效的方式(+30k 记录)?
这有点像显示所有不可连接的行,但这种语法对我来说很奇怪......
我有DB InnoDb innodb_db_1。我已经打开了innodb_file_per_table。
如果我去,var/lib/mysql/innodb_db_1/我会找到文件table_name.ibd, table_name.frm, db.opt。
现在,我正在尝试将这些文件复制到另一个数据库,例如复制到innodb_db_2(var/lib/mysql/innodb_db_2/),但是什么也没有发生。
但是,如果我的数据库是MyIsam,则可以用这种方式进行复制,一切正常。
通过复制InnoDb数据库文件来移动数据库有什么建议?
我有一个当前为 10GB 的日志表。它有很多过去两年的数据,我真的觉得在这一点上我不需要那么多。我是否错误地认为在表中保存多年的数据不好(较小的表更好)?
我的桌子都有一个 MYISAM 引擎。
我想删除2014年和2015年的所有数据,很快我会删除2016年,但我担心运行DELETE语句后,到底会发生什么。我知道因为它是 ISAM,所以会发生一个无法写入的锁定?我可能会按月删除数据,并在深夜进行,以尽量减少它,因为它是一个生产数据库。
具体来说,我的主要兴趣是:在删除之后我应该采取某种行动吗?我是否需要手动告诉 MYSQL 对我的表做任何事情,或者 MYSQL 会自己做所有的内务管理,回收所有内容,重新索引,并最终在我将删除的 400,000k 记录之后优化我的表。
谢谢大家!
我想在MySQL中创建一个MyISAM表(尝试了各种版本的5.0.x和5.1.x),允许超过2 ^ 32行.实现这一目标的方法是让MySQL使用8字节而不是4字节的行指针.
以下是MySQL手册的引用:
如果使用--with-big-tables选项构建MySQL,则行限制将增加到1.844E + 19行.请参见第2.3.2节"典型配置选项".Unix和Linux的二进制发行版使用此选项构建.
听起来很简单吧?但是我已经为Linux x86_64尝试了各种二进制发行版,并且还使用"--with-big-tables"选项从源代码构建MySQL.在每种情况下,我仍然无法超越2 ^ 32的限制.我这样创建一个表:
CREATE TABLE big (col int) MAX_ROWS=1099511627776
当我检查表状态时,它说:
Create_options: max_rows=4294967295
我如何逃脱32位炼狱?使用InnoDB可能会解决问题,但对于我正在运行的查询类型,它的执行速度要慢得多.
仅供参考,这是一个没有解决问题的重要参考:
我已经读过MySQL(InnoDB)中的事务是原子的,但是当我在5个线程中测试下一个代码时,它们会选择相同的ID:
$db->beginTransaction();
$row = $db->fetchRow("SELECT * FROM atomic WHERE selected = 0 LIMIT 1");
sleep(5);
$db->update("atomic", array('selected' => 1), "id = " . $row['id']);
$db->commit();
echo "Selected row: " . $row['id'];
Run Code Online (Sandbox Code Playgroud)