使用INT与VARCHAR作为MySQL中的主键之间是否存在可衡量的性能差异?我想使用VARCHAR作为参考列表的主键(想想美国,国家代码),并且同事不会将INT AUTO_INCREMENT作为所有表的主键.
我的论点,详见这里,是INT和VARCHAR之间的性能差异可以忽略不计,因为每个INT外键引用将需要一个JOIN,使参考的意义上说,VARCHAR键则直接呈现的信息.
那么,有没有人有这个特定用例的经验以及与之相关的性能问题?
我想使用外键来保持完整性并避免孤儿(我已经使用了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存储引擎,以便它不存储已删除表中的数据?
或者我每次都要重建一个新的数据库?
我有一个使用InnoDB存储引擎的MySQL表; 它包含大约2M个数据行.当我从表中删除数据行时,它没有释放分配的磁盘空间.运行optimize table命令后,ibdata1文件的大小也没有减少.
有没有办法从MySQL回收磁盘空间?
我情况很糟糕; 这个应用程序在大约50个不同的位置运行,现在几乎所有这些都出现了磁盘空间不足的问题.
我收到此错误消息:
第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命令: - ?)
我正在尝试使用简单查询向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表中添加行时才会出现这种情况.
我正在开发一个高容量的Web应用程序,其中一部分是一个讨论帖子的MySQL数据库,需要平滑地增长到20M +行.
我原本打算在桌子上使用MyISAM(用于内置的全文搜索功能),但由于单次写入操作而导致整个表被锁定的想法使我快门.行级锁更有意义(更不用说InnoDB在处理大型表时的其他速度优势).所以,出于这个原因,我非常决定使用InnoDB.
问题是...... InnoDB没有内置的全文搜索功能.
我应该使用第三方搜索系统吗?像Lucene(c ++)/Sphinx?你们这些数据库忍者有什么建议/指导吗?LinkedIn的zoie(基于Lucene)看起来是目前最好的选择...围绕实时功能构建(这对我的应用程序来说非常关键.)如果没有一些洞察力,我有点犹豫不决...
(仅供参考:将使用高内存装备在EC2上,使用PHP来提供前端)
我正要写一个包含a的查询WHERE isok=1.顾名思义,isok是一个布尔字段(实际上TINYINT(1) UNSIGNED是根据需要设置为0或1).
索引此字段是否有任何性能提升?引擎(在这种情况下是InnoDB)是否会更好或更差地查找索引?
在MySQL中,无法为特定数据库指定存储引擎,仅针对单个表.但是,您可以指定在一个会话期间使用的存储引擎:
SET storage_engine=InnoDB;
Run Code Online (Sandbox Code Playgroud)
因此,您不必为每个表指定它.
如果确实所有表都使用InnoDB,我如何确认?
innodb ×10
mysql ×10
myisam ×3
delete-row ×1
foreign-keys ×1
indexing ×1
performance ×1
primary-key ×1
search ×1
sql ×1