我们使用的是Mysql 5.7
我们在大约 5 亿行的表中的 varchar(255) 列上有一个索引。
select distinct varchar_column from table产生 7 个结果,最大长度为 21。
一位 DBA 顾问建议我们将 varchar 列的长度降低到 21。在测试中降低 varchar 列的大小会缩小索引大小,相当于简单地对表进行碎片整理而不更改架构(例如alter table)。
当我们将长度减少到 17 时,我们看到了稍微好一些的结果。
除了索引大小之外,我们还缺少什么优势吗?
VARCHAR(1000)我的表中有一个列。它将包含不保证唯一的字符串。我有一个查询将此列作为子句的一部分进行搜索WHERE IN,列表中的值列表IN ('...')将约为 100。在最初几个月后,该表可能会包含数百万行。我知道建立索引可能会减慢插入速度并可能创建相当大的索引。
我正在运行 mysql 5.1 并使用 INNODB 引擎。
在MySQL/InnoDB中,聚集索引与主键同义,因此选择一个差的主键会影响数据库性能,即使用UUID作为PK是数据库写入的性能杀手。
现在,在 PostgreSQL 中,不存在像 MySQL 中那样的集群限制。如果我选择UUID作为PK有什么影响?PostgreSQL 中是否也像 MySQL 一样存在数据库写入性能杀手?
对于“并发插入”,MySQL参考手册有如下解释:
MyISAM 存储引擎支持并发插入,以减少给定表的读写器之间的争用:如果 MyISAM 表在数据文件中没有空洞(中间删除了行),则可以执行 INSERT 语句将行添加到最后SELECT 语句从表中读取行的同时。
http://dev.mysql.com/doc/refman/5.5/en/concurrent-inserts.html
假设我们的数据库“并发插入”参数设置为“自动”(1)。
我们有一个有间隙的 MyISAM 表。当我们插入新行并填补这些空白时,表是否“立即”准备好接受未来插入查询的“并发插入”?
或者我们是否需要在表知道没有间隙之前运行“优化”?
据我所知的基本区别CHAR和VARCHAR数据类型,它CHAR占用的固定长度,而VARCHAR占用空间基于正被存储的内容。
但是如果VARCHAR根据存储的内容动态处理空间管理如此有效,为什么数据库支持CHAR数据类型,所有CHAR(n)字段都可以是VARCHAR(n)字段,对吧?
mysql ×4
index ×2
index-tuning ×2
datatypes ×1
insert ×1
myisam ×1
mysql-5.7 ×1
performance ×1
postgresql ×1
primary-key ×1
schema ×1
sql-standard ×1
storage ×1
varchar ×1