标签: innodb

INT和VARCHAR主键之间是否存在真正的性能差异?

使用INT与VARCHAR作为MySQL中的主键之间是否存在可衡量的性能差异?我想使用VARCHAR作为参考列表的主键(想想美国,国家代码),并且同事不会将INT AUTO_INCREMENT作为所有表的主键.

我的论点,详见这里,是INT和VARCHAR之间的性能差异可以忽略不计,因为每个INT外键引用将需要一个JOIN,使参考的意义上说,VARCHAR键则直接呈现的信息.

那么,有没有人有这个特定用例的经验以及与之相关的性能问题?

mysql performance myisam innodb primary-key

161
推荐指数
7
解决办法
10万
查看次数

MySQL外键约束,级联删除

我想使用外键来保持完整性并避免孤儿(我已经使用了innoDB).

如何创建DELETE ON CASCADE的SQL语句?

如果我删除某个类别,那么如何确保它不会删除与其他类别相关的产品.

数据透视表"categories_products"在其他两个表之间创建了多对多关系.

categories
- id (INT)
- name (VARCHAR 255)

products
- id
- name
- price

categories_products
- categories_id
- products_id
Run Code Online (Sandbox Code Playgroud)

mysql innodb foreign-keys

152
推荐指数
3
解决办法
24万
查看次数

Howto:清理一个mysql InnoDB存储引擎?

是否可以清理mysql innodb存储引擎,以便它不存储已删除表中的数据?

或者我每次都要重建一个新的数据库?

mysql innodb

128
推荐指数
2
解决办法
15万
查看次数

MySQL InnoDB在从表中删除数据行后没有释放磁盘空间

我有一个使用InnoDB存储引擎的MySQL表; 它包含大约2M个数据行.当我从表中删除数据行时,它没有释放分配的磁盘空间.运行optimize table命令后,ibdata1文件的大小也没有减少.

有没有办法从MySQL回收磁盘空间?

我情况很糟糕; 这个应用程序在大约50个不同的位置运行,现在几乎所有这些都出现了磁盘空间不足的问题.

mysql innodb delete-row

127
推荐指数
7
解决办法
13万
查看次数

112
推荐指数
5
解决办法
8万
查看次数

虚假外键约束失败

我收到此错误消息:

第40行的错误1217(23000):无法删除或更新父行:外键约束失败

......当我试图放桌子时:

DROP TABLE IF EXISTS `area`;
Run Code Online (Sandbox Code Playgroud)

......定义如下:

CREATE TABLE `area` (
  `area_id` char(3) COLLATE utf8_spanish_ci NOT NULL,
  `nombre_area` varchar(30) COLLATE utf8_spanish_ci NOT NULL,
  `descripcion_area` varchar(100) COLLATE utf8_spanish_ci NOT NULL,
  PRIMARY KEY (`area_id`),
  UNIQUE KEY `nombre_area_UNIQUE` (`nombre_area`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
Run Code Online (Sandbox Code Playgroud)

有趣的是,我已经删除了具有外键的架构中的所有其他表area.实际上,除了area表之外,数据库是空的.

如果数据库中没有任何其他对象,它怎么可能有子行?据我所知,InnoDB不允许在其他模式上使用外键,是吗?

(我甚至可以运行RENAME TABLE area TO something_else命令: - ?)

mysql innodb

110
推荐指数
5
解决办法
22万
查看次数

ERROR 1114(HY000):桌子已满

我正在尝试使用简单查询向InnoDB表添加一行:

INSERT INTO zip_codes (zip_code, city) VALUES ('90210', 'Beverly Hills');
Run Code Online (Sandbox Code Playgroud)

但是当我尝试这个查询时,我得到以下内容:

SELECT COUNT(*) FROM zip_codes
Run Code Online (Sandbox Code Playgroud)

做一个"SELECT COUNT(*)FROM zip_codes"给了我188,959行,考虑到我在同一个数据库中有另一个810,635行的表,这似乎不太多.

我对InnoDB引擎缺乏经验,从未在MyISAM上遇到过这个问题.这里有哪些潜在的问题?

编辑:只有在zip_codes表中添加行时才会出现这种情况.

mysql innodb

100
推荐指数
14
解决办法
19万
查看次数

使用InnoDB进行全文搜索

我正在开发一个高容量的Web应用程序,其中一部分是一个讨论帖子的MySQL数据库,需要平滑地增长到20M +行.

我原本打算在桌子上使用MyISAM(用于内置的全文搜索功能),但由于单次写入操作而导致整个表被锁定的想法使我快门.行级锁更有意义(更不用说InnoDB在处理大型表时的其他速度优势).所以,出于这个原因,我非常决定使用InnoDB.

问题是...... InnoDB没有内置的全文搜索功能.

我应该使用第三方搜索系统吗?像Lucene(c ++)/Sphinx?你们这些数据库忍者有什么建议/指导吗?LinkedIn的zoie(基于Lucene)看起来是目前最好的选择...围绕实时功能构建(这对我的应用程序来说非常关键.)如果没有一些洞察力,我有点犹豫不决...

(仅供参考:将使用高内存装备在EC2上,使用PHP来提供前端)

mysql sql search innodb full-text-search

93
推荐指数
3
解决办法
7万
查看次数

索引布尔字段是否有任何性能提升?

我正要写一个包含a的查询WHERE isok=1.顾名思义,isok是一个布尔字段(实际上TINYINT(1) UNSIGNED是根据需要设置为0或1).

索引此字段是否有任何性能提升?引擎(在这种情况下是InnoDB)是否会更好或更差地查找索引?

mysql indexing innodb

87
推荐指数
5
解决办法
3万
查看次数

我怎么知道mysql表是使用myISAM还是InnoDB引擎?

在MySQL中,无法为特定数据库指定存储引擎,仅针对单个表.但是,您可以指定在一个会话期间使用的存储引擎:

SET storage_engine=InnoDB;
Run Code Online (Sandbox Code Playgroud)

因此,您不必为每个表指定它.

如果确实所有表都使用InnoDB,我如何确认?

mysql myisam innodb storage-engines

81
推荐指数
3
解决办法
6万
查看次数