选择MySQL的数据类型?

时间:2011-04-08 00:30:22

标签: mysql sql database performance

我已经研究和阅读了几天的SQL数据类型(我知道......我知道,这不是很长),而且我很难掌握的一件事就是如何选择最好的数据类型,用于扩展性,效率和访问的便利性。

我认为如何选择基本数据类型(即int vs varchar)非常简单,但是如何在blob和文本类型之间做出选择。

MySQL手册页很棒,但它们不是我们电脑爱好者所喜欢的...高效。

我认为如果我们可以编译一个MySQL数据类型列表,每个数据类型的一般优点/缺点以及何时选择该数据类型是有意义的,那将是非常棒的。

3 个答案:

答案 0 :(得分:11)

答案 1 :(得分:1)

关于BLOB vs TEXT(因为这是你帖子中唯一的具体问题):BLOB用于二进制数据,TEXT用于文本数据。

使用符合您需求的最具体类型的列通常非常简单,如果它们都不适合您的使用,则回退到泛型类型。

答案 2 :(得分:1)

对于MySQL,有一个名为analyze的过程,它将评估数据启发式,并认为它可以为数据类型提供最佳选择,并建议一个或多个枚举值。

用于生成要运行的SQL的快速动态concat脚本

select CONCAT(' SELECT ', COLUMN_NAME, ' FROM ', TABLE_NAME, ' procedure analyse() ;' ) 
FROM INFORMATION_SCHEMA.COLUMNS   
WHERE table_schema ="yourDbName"   
AND DATA_TYPE ="varchar"   
AND CHARACTER_MAXIMUM_LENGTH > 190   
AND COLUMN_KEY not in (' ') ;

**上面的SQL不评估PK - 假设它们不是文本字段

当希望根据数据使用情况更改数据类型或通过移动或存储较小的数据包来提高效率时,此过程非常有用。

Percona Blog有一个适用于Drupal的程序分析的良好工作示例。 https://www.percona.com/blog/2009/03/23/procedure-analyse/

一些研究是针对压缩进行的,这与更长的utf8mb4索引相关联 http://techblog.constantcontact.com/devops/space-the-final-frontier-a-story-of-mysql-compression/