标签: innodb

MySQL存储引擎的决定

我是荷兰的网页设计师.我从头开始构建Web应用程序,我总是使用CMS,并对其进行自定义.

我正在php/mysql中建立一个拍卖网站,已经完成了.最近我读了一些关于存储引擎的文章.

我有一些问题一直困扰着我一段时间:


什么样的存储引擎最适合我的网站,我使用myIsam,innodb等.

我正在建设的网站是一个拍卖网站,它必须处理几个读写每一个!它必须检查拍卖是开放,关闭,暂停,当前价格等.

我知道不是我的数据库中的所有表都会被访问,这些表只有3个.它们目前都是myIsam.这个好吗?我应该改变它们吗?没有改变?我真的不知道该怎么办.我是否会改变它们,这会对我的网站产生巨大影响.并且这些变化很容易适用,或者很难做到.


我的另一个问题是关于缓存系统.

我也读了一些关于它们但我不知道它们是否适用于我所拥有的那种网站.我从数据库中获取的数据发生了很大变化.缓存它们对我来说很方便吗?例如,可以缓存拍卖,因为并非所有项目都会更改.但拍卖会不会永远存在,经过几个小时它就不见了.

我无法看到缓存系统如何应用于此,或者我看到错误的方式.而且,如果这个系统适用于我,这种改变是否需要付出很多努力,而且这种努力会带来巨大的变化.


这些都是我的问题,我猜它们非常普遍,我希望有些人可以帮助我,我真的很感激.

问候

mysql caching myisam innodb

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

MySQL InnoDB是否总是需要每个外键约束的索引?

我正在使用phpMyAdmin.为了使用InnoDB设置外键约束(在Structure选项卡上的"Relation View"链接下),我似乎需要为要添加约束的字段添加索引.这显然会影响表上插入/更新的性能,特别是如果我想添加几个约束.是否可以在InnoDB中指定外键约束或关系完整性而无需为所需字段创建索引?

非常感谢JS,伦敦

mysql innodb foreign-keys

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

MySQL InnoDB解锁了一行

更新数据库中的某一行时,我会收到锁定超时.其他行更新没问题.

#1205 - Lock wait timeout exceeded; try restarting transaction
Run Code Online (Sandbox Code Playgroud)

我该如何解锁这一特定行?

这是两个相关的表格.我正在尝试更新用户的电子邮件.我不认为租客应该造成任何问题.

CREATE  TABLE IF NOT EXISTS `mydb`.`user` (
  `username` VARCHAR(45) NOT NULL ,
  `email` VARCHAR(60) NOT NULL ,
  `password` VARCHAR(45) NOT NULL ,
  `created` TIMESTAMP NULL DEFAULT NULL ,
  `last_login` TIMESTAMP NULL ,
  PRIMARY KEY (`username`) )

ENGINE = InnoDB;


CREATE  TABLE IF NOT EXISTS `mydb`.`tenant` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `username` VARCHAR(45) NOT NULL ,
  `address` VARCHAR(90) NULL ,
  `company` VARCHAR(45) NULL ,
  `phone` VARCHAR(25) NOT …
Run Code Online (Sandbox Code Playgroud)

mysql database innodb

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

为什么MyISAM解决了InnoDB引起的这个问题?

我在MySQL应用程序上的Python中遇到了一个非常奇怪的错误.以下代码位于多次调用的循环中.代码从未引发错误,但也从未插入任何数据:

    cursor = db.cursor()
    cursor.execute("""
        INSERT INTO test_1 (value) VALUES (10000);
    """)
Run Code Online (Sandbox Code Playgroud)

另一个奇怪的症状是,稍后使用phpMyAdmin将数据插入到同一个表中会产生非常大的auto_increment ID,因此即使表中没有实际数据,auto_increment计数器也会递增(无论如何,根据SELECT*FROM test_1).插件使用MySQL Workbench正常工作.

最后我随机发现使用桌面上的MyISAM引擎代替InnoDB修复它.为什么?

mysql myisam innodb

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

使用Mysql事务的优点

我刚刚在innodb中找到了关于此功能的信息,我有些困惑。

如果其中一个失败,除了能够执行多个查询和回滚之外,还有其他查询吗?

并且它们比正常查询慢吗?

mysql database innodb

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

MySQL未知的表引擎innodb

我正在尝试将drupal上的测试网站迁移到Amazon ec2上的实时服务器上.我使用phpmyadmin迁移了数据库,并尝试访问该站点.我收到了这个错误:

PDOException:SQLSTATE [42000]:语法错误或访问冲突:1286未知表引擎'InnoDB':SELECT expire,value FROM {semaphore} WHERE name =:name; lock_may_be_available()中的数组([:name] => variable_init)(/var/www/includes/lock.inc的第167行).

我相信这里的问题是MySQL没有InnoDB.我查看了my.cnf文件,没有说明的行skip-innodb.

我试过show engines,它显示了一堆引擎但不是innodb.我已经尝试重新启动我的服务器并删除日志文件,就像之前建议的那样,但是没有用.

也许需要做的是以某种方式安装Innodb引擎.你能告诉我怎么做吗?

mysql innodb drupal

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

MySQL存储引擎用于大型日志表

(我已经看到了这个问题,但是对于我想问的问题,它并不具体.)

我正在设置一个大型(大约100 GB)的日志表,平均记录大小为100-200字节和几个索引(索引?).插入率约为每秒100-200条记录.我将在此表上运行分析查询,可能并非所有这些查询都会找到合适的索引,因此它们可能会运行很长时间并查找大量数据.

  1. 你会建议什么样的存储引擎?(基本上是MyISAM与InnoDB.)
  2. 如果使用MyISAM,长查询会阻塞插入吗?
  3. 表大小是一个问题(不是很大,但仍然).在这方面,一台发动机比另一台更有效吗?
  4. 性能方面,他们如何比较?
  5. 在这种情况下还有什么我必须注意的吗?

mysql performance myisam innodb

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

如何锁定InnoDB表以防止在复制该表时进行更新?

我想暂时锁定一个表,以防止其他并发进程对其进行更改.原因是这个表将被复制到临时表,更改,然后被复制回来(实际上删除了原始表并重命名了新表).然后在完成所有这些之后,我想解锁表格并希望在锁定恢复期间尝试任何尝试.

我还需要能够从已锁定的表中读取以构建新表.

这是我尝试过的,但它似乎不起作用.

$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);

$mysqli->autocommit(false)

// create a table to hold parts to keep
$q1 = "CREATE TABLE new_table LIKE my_table;";
$res1 = $mysqli ->query($q1);       

// Lock table to avoid concurrent update issues
$q2 = "LOCK TABLE my_table WRITE;";
$res2 = $mysqli ->query($q2);           

// Insert data to keep into new table   
$q3 = "INSERT INTO new_table SELECT * FROM my_table WHERE some_id IN (SELECT ID FROM table2)";
$res3 = $mysqli ->query($q3);

// drop …
Run Code Online (Sandbox Code Playgroud)

mysql innodb locking

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

MySQL InnoDB比MyISAM慢得多

我有两个表(缩小到重要字段):

syskeywordobjects:
pksyskeywordobjects BIGINT
fksyskeywords BIGINT
fkcontents BIGINT

fkcontents INDEX (fkcontents)
fksyskeywords INDEX (fksyskeywords)
fkcontents_fksyskeywords INDEX (fkcontents, fksyskeywords)


syskeywords:
pksyskeywords BIGINT
keyword VARCHAR

keyword INDEX (keyword)
Run Code Online (Sandbox Code Playgroud)

在这两个表上,我运行以下查询:

SELECT k.pksyskeywords, k.keyword, COUNT( k.pksyskeywords ) AS counter
FROM syskeywordobjects ko INNER JOIN syskeywords k ON ko.fksyskeywords = k.pksyskeywords
WHERE (
    k.pksyskeywords <> 1218713201167374664
    AND EXISTS (
        SELECT innerko.pksyskeywordobjects
        FROM syskeywordobjects innerko
        WHERE ko.fkcontents = innerko.fkcontents
        AND innerko.fksyskeywords = 1218713201167374664
    )
)
GROUP BY k.pksyskeywords, k.keyword
ORDER BY counter DESC 
LIMIT 20
Run Code Online (Sandbox Code Playgroud)

如果表使用MyISAM,则查询大约需要1-2秒,但如果我使用InnoDB(我必须这样做)则需要25-30秒.为什么InnoDB慢了大约20倍? …

mysql performance myisam innodb

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

Mysql:前缀索引与索引

可以像普通索引一样使用mysql前缀索引吗?

如果有一些TEXT列,并且前缀索引的长度为例如1,则查询为:

SELECT * FROM table WHERE textcol = 'ab'

它会给我所有以'a'开头的行还是会检查整列值?

一般来说,我很想知道使用前缀索引时是否有任何警告.不考虑性能,如果任何查询必须以不同方式编写,或者客户端是否必须执行额外逻辑,则更多.

mysql indexing innodb

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