我不是很熟悉数据库及其工作原理。从性能的角度(插入/更新/查询),使用字符串作主键是否比整数慢?
当前回答
变量太多了。这取决于表的大小,索引,字符串键域的性质…
一般来说,整数会更快。但差别大到足以让人在意吗?这很难说。
另外,你选择字符串的动机是什么?数字型的自动递增键通常也容易得多。是语义上的吗?方便?复制/断开连接问题?你的回答可能会限制你的选择。这也会让你想起你忘记的第三个“混合”选项:Guids。
其他回答
默认情况下,ASPNetUserIds是128字符字符串,性能很好。
如果键必须是唯一的在表中,它应该是键。这是为什么;
主字符串键=正确的数据库关系,1个字符串键(主)和1个字符串索引(主)。
另一个选项是一个典型的int Key,但如果字符串必须是唯一的,你仍然可能需要添加一个索引,因为不停的查询来验证或检查它的唯一性。
所以使用int标识键=不正确的DB关系,1 int键(主),1 int索引(主),可能是唯一的字符串索引,手动验证相同的字符串不存在(类似sql检查可能)。
为了在主键上使用int而不是字符串获得更好的性能,当字符串必须是唯一的时,它将不得不是一个非常奇怪的情况。我总是喜欢使用字符串键。根据经验,除非需要,否则不要对数据库进行反规格化。
我可能会使用一个整数作为你的主键,然后把你的字符串(我假设它是某种ID)作为一个单独的列。
create table sample (
sample_pk INT NOT NULL AUTO_INCREMENT,
sample_id VARCHAR(100) NOT NULL,
...
PRIMARY KEY(sample_pk)
);
您总是可以对字符串(ID)列(其中sample_id =…)进行有条件的查询和连接。
使用string作为主键的另一个问题是,由于索引不断按顺序排列,当创建一个新键时,索引必须重新排序……如果使用自动编号整数,则新键只添加到索引的末尾。
变量太多了。这取决于表的大小,索引,字符串键域的性质…
一般来说,整数会更快。但差别大到足以让人在意吗?这很难说。
另外,你选择字符串的动机是什么?数字型的自动递增键通常也容易得多。是语义上的吗?方便?复制/断开连接问题?你的回答可能会限制你的选择。这也会让你想起你忘记的第三个“混合”选项:Guids。
Inserts to a table having a clustered index where the insertion occurs in the middle of the sequence DOES NOT cause the index to be rewritten. It does not cause the pages comprising the data to be rewritten. If there is room on the page where the row will go, then it is placed in that page. The single page will be reformatted to place the row in the right place in the page. When the page is full, a page split will happen, with half of the rows on the page going to one page, and half going on the other. The pages are then relinked into the linked list of pages that comprise a tables data that has the clustered index. At most, you will end up writing 2 pages of database.
推荐文章
- 我如何检查如果一个变量是JavaScript字符串?
- 如何显示有两个小数点后的浮点数?
- 在MySQL中检测值是否为number
- MySQL中两个日期之间的差异
- 使用SQL查询查找最近的纬度/经度
- 在Lua中拆分字符串?
- 模式、表和数据库之间的区别是什么?
- 将一列的多个结果行连接为一列,按另一列分组
- 如何在Python中按字母顺序排序字符串中的字母
- 检查MySQL表是否存在而不使用“select from”语法?
- python: SyntaxError: EOL扫描字符串文字
- PHP子字符串提取。获取第一个'/'之前的字符串或整个字符串
- 我看到VARCHAR(255)如此频繁地使用(而不是其他长度),有什么好的原因吗?
- 使用pgadmin连接到heroku数据库
- 在PostgreSQL中快速发现表的行数