33 mysql sql database indexing search
如果我使用ID nr:s而不是VARCHARS作为外键,这样会更好吗?是否更好地使用ID nr:s而不是VARCHARS作为主键?ID ID我的意思是INT!
这就是我现在拥有的:
category table:
cat_id ( INT ) (PK)
cat_name (VARCHAR)
category options table:
option_id ( INT ) (PK)
car_id ( INT ) (FK)
option_name ( VARCHAR )
Run Code Online (Sandbox Code Playgroud)
我可能有这个我认为:
category table:
cat_name (VARCHAR) (PK)
category options table:
cat_name ( VARCHAR ) (FK)
option_name ( VARCHAR ) ( PK )
Run Code Online (Sandbox Code Playgroud)
或者我在这里想错了?
Arm*_*est 30
VARCHAR用于任何KEY的问题在于它们可以容纳WHITE SPACE.白色空间由任何非屏幕可读的字符,如空格跳格,回车等使用VARCHAR作为重点可以让你的生活困难,当你开始追捕为什么表不会在最后回国与多余的空格记录他们的钥匙.
当然,你CAN使用VARCHAR,但你必须要非常小心的输入和输出.它们也占用更多空间,在进行查询时可能会更慢.
整数类型有一个包含10个有效字符的小列表,0,1,2,3,4,5,6,7,8,9.它们是用作密钥的更好的解决方案.
你总是可以使用基于整数的键,并使用VARCHAR作为一个独特的价值,如果你想拥有更快的查找速度的优势.
jrv*_*tti 12
我的2美分:
从性能角度来看,使用CHAR或VARCHAR作为主键或索引是一场噩梦.
我测试了复合主键(INT + CHAR,INT + VARCHAR,INT + INT),到目前为止INT + INT是最佳性能(加载数据仓库).如果只保留数字主键/索引,可以说大约两倍的性能.
Bob*_*ica 11
当我在进行设计工作时,我会问自己:我能否保证这些数据中的任何内容都是非NULL,唯一且不变的?如果是这样,那么候选人就成了主键.如果没有,我知道我必须生成一个要使用的键值.那么,假设我的候选键恰好是VARCHAR,那么我会查看数据.它的长度是否相当短(意思是说,20个字符或更少)?或者VARCHAR字段是否相当长?如果它很短,那么它可用作一个键 - 如果它很长,也许最好不要将它用作一个键(尽管如果考虑到它是主键,我可能不得不索引它).至少我担心的一部分是主键必须被索引,并且可能被用作来自其他表的外键.VARCHAR字段的比较往往比数字字段(特别是二进制数字字段,如整数)的比较慢,因此使用长VARCHAR字段作为键可能会导致性能降低.因人而异.