Bri*_*ian 104 mysql sql performance types
我有一个MySQL表,动态插入行.因为我不能确定字符串的长度并且不希望它们被切断,所以我将它们变成varchar(200),这通常比我需要的大得多.给varchar字段的长度是否超过必要的长度?
Bil*_*win 286
有一个可能的性能影响:在MySQL中,临时表和MEMORY表将VARCHAR列存储为固定长度的列,填充到其最大长度.如果你设计的VARCHAR列比你需要的最大尺寸大,那么你将消耗更多的内存.这会影响缓存效率,排序速度等.
Ale*_*lli 58
不,在这个意义上,如果你在该列中存储的值总是(说)少于50个字符,宣告列varchar(50)或varchar(200)具有相同的性能.
小智 13
尺寸是性能!尺寸越小越好.不是今天或明天,但有一天,无论你设计什么样的设计,当你遇到严重的瓶颈时,你的桌子都会变得很大.但是,您可以预见设计阶段可能首先出现的一些潜在瓶颈,并尝试扩展数据库快速,愉快地执行的时间,直到您需要重新考虑您的方案或通过添加更多服务器来横向扩展.
在您的情况下,您可能遇到许多性能泄漏:使用长varchar列几乎不可能进行大型连接.对这些列进行索引是一个真正的杀手.您的磁盘必须存储数据.一个内存页面可以容纳更少的行,而表扫描会慢得多.查询缓存也不太可能在这里帮助你.
你必须问自己:每年可能发生多少次插入?平均长度是多少?我是否真的需要超过200个字符,或者我可以在我的应用程序前端捕获它,即使通知用户最大长度?我可以将表格分成一个较窄的表格以进行快速索引和扫描,另一个表格可以保存额外的,不太常用的扩展大小数据吗?我可以将可能的varchar数据类型分类,然后将一些数据提取到一些较小的,可能是int或bool类型的列中,并以这种方式缩小varchar列吗?
你可以在这里做很多事情.最好先进行第一次假设,然后使用实际测量的性能数据逐步重新设计.祝好运.
小智 5
你们中的一些人错误地认为 avarchar(200)在磁盘上占用的表大小比 a 多varchar(20)。不是这种情况。只有当您超过 255 个字符时,mysql 才会使用额外的字节来确定varchar字段数据的长度。