【发布时间】:2018-08-11 11:37:38
【问题描述】:
我有一个 MySQL 数据库,它有一个名为 user 的 InnoDB 表。
每个用户都需要在创建帐户期间创建一个用户名。用户名的长度只能介于 1 到 40 个字符 (utf-8) 之间。此用户名的目的是允许一个用户搜索另一个用户。
问题是我不确定用户名使用什么数据类型。由于用户名的长度可变,Varchar 似乎很合适,但我不确定索引和搜索Varchar 的速度有多快。我的想法是,因为我知道最大字符长度,我可以使用 Char(40) 代替。虽然这会因为填充而浪费一些空间,但我想它会使索引和搜索更快、更高效,因为它是固定长度的。
我不确定的另一个方面是我是否应该为此用户名列使用Fulltext 索引或BTree 索引。或者如果有其他我不知道的索引方法会更好。
那么与哪个索引相关的哪种数据类型可以为我提供最好、最快和最具可扩展性的解决方案?
【问题讨论】:
-
您认为要存储多少用户数.. ??'
-
如果一切顺利,大约 15-20 百万,只是为了做好准备
-
没有明显的优势..
-
对于索引的种类,取决于您将使用什么来搜索:如果它是 99.9% 情况下字符串的开头,则为 BTree。如果您每次都搜索
*pattern*,那么BTree 甚至都不会被使用... -
不,如果你想要这样的模式 %LIKE%,索引是从字符串的开头到结尾
标签: mysql sql database-design sqldatatypes database-indexes