草庐IT

mysql - MySQL中的多列主键是优化问题吗?

一直在研究使用多列主键,并且由于性能对于流量和数据库的大小非常重要,所以在我开始在我的许多表上放弃唯一ID方法之前,我需要知道是否有什么需要考虑的开始使用多列主键。那么,使用多列主键与基本的单列、auto-inc主键相比,在性能/优化方面的优缺点是什么? 最佳答案 您是否有特殊原因需要/想要使用多列键而不是(我假设)已经创建的单列键?NaturalKeys的问题之一正在处理对所有外键的键值进行级联更新。诸如自动增量列之类的代理键可以避免这种情况。在性能方面,根据行数、列的数据类型、存储引擎以及专用于MySQL的RAM量,多列键可能会

mysql - 主键作为 INT,全局键作为 GUID,以提高性能

在决定表的键时,表有一个INT主键(自动增量)和数据库范围有一个GUID(除了INT)是否好?鉴于将有更多的表DML语句,对INT进行操作会更快,而如果要执行任何泛数据库DML语句,GUID将派上用场。请注意我正在使用MySQL,以防万一。请发表意见。 最佳答案 我以前做过并且成功了:正如你所指出的,使用GUID意味着我们在合并时避免了冲突,比如说,来自一个数据库的数据与另一个数据库,并且int为我们提供了高效的连接等。当您处理OLAP时,我永远不会使用GUID作为键,因为那样会提高性能。

mysql - 如果使用原始 ActiveRecord::Base.connection(),如何获取最后插入的主键值?

此代码在我的本地RoR/Windows7(64位)上运行:sql=ActiveRecord::Base.connection()last_pk=sql.insert("insertintomanual(name)values('hellonewvalue')")puts'last_pk=',last_pk但始终显示“0”。由于各种原因,我无法在这种情况下使用ActiveRecord。(注意:以上代码在我的共享主机上运行良好。另请注意:为了使任何数据库连接正常工作,我必须根据StackOverflow.com上的另一个答案将mysql5\bin\libmySQL.dll替换为不同的DLL

php - 在 DUPLICATE KEY 错误后获取主键?

如果我运行插入查询但由于重复键错误而失败,有没有办法在不进行其他选择的情况下获取其主键?基本上:INSERTINTOtbl(field)VALUES('myvalue')这会失败,因为已经有ID为1且字段为myvalue的记录。现在我想知道ID:1而无需执行另一个查询:SELECTidFROMtblWHEREfield='myvalue'有可能吗? 最佳答案 这是一个链接,它提供了四种不同的方法来处理这个问题:http://mikefenwick.com/blog/insert-into-database-or-return-id-

java - 由于主键,数据库插入速度慢

得到一个MySQL数据库,其中包含一个包含基于邮政编码和门牌号的值的表。因此,选择主键为邮政编码和门牌号,因为这些是要搜索的字段。该数据库包含大约1000万条记录。一个特定的邮政编码由大约100000个不同的门牌号组成,插入速度极慢(每10000条记录需要1小时)。编程语言是Java,我在10000个批处理中使用准备好的语句,自动提交为false。表的结构如下:+-----------------+-------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+--------------

mysql - 是否可以通过主键合并两个表?

我有两个表,我需要合并它们,它们是:CREATETABLEIFNOTEXISTS`legacy_bookmarks`(`id`int(11)NOTNULLAUTO_INCREMENT,`url`text,`title`text,`snippet`text,`datetime`datetimeDEFAULTNULL,PRIMARYKEY(`id`),KEY`datetime`(`datetime`),FULLTEXTKEY`title`(`title`,`snippet`))和:CREATETABLEIFNOTEXISTS`legacy_links`(`id`mediumint(11)N

mysql - 唯一键可以用作主键那么为什么我们保留另一个主键?

CREATETABLEIFNOTEXISTS`tbl_users`(`id`int(11)NOTNULLAUTO_INCREMENT,`username`varchar(50)COLLATElatin1_general_ciNOTNULL,`passd`varchar(50)COLLATElatin1_general_ciNOTNULL,PRIMARYKEY(`id`),UNIQUEKEY`username`(`username`))ENGINE=InnoDBDEFAULTCHARSET=latin1COLLATE=latin1_general_ciAUTO_INCREMENT=1;我

使用主键 IN 语句删除时的 Mysql Innodb 死锁

寻求帮助以了解为什么会出现这种僵局。我已经阅读了MySQL文档和许多关于死锁相关问题的SO问题,但我显然遗漏了一些东西。这是有问题的表:CREATETABLE`table_queue`(`id`int(11)NOTNULLAUTO_INCREMENT,PRIMARYKEY(`id`))ENGINE=InnoDB;它有一大堆其他列已被删除以保持简单(没有一个是外键)。两个或多个线程正在执行以下查询:DELETEqFROMtable_queueqWHEREq.idIN(165765,165770,165782,165787,165791..);IN语句最多可以有1,000个值。如您所见,它

mysql - 试图从 MySQL 表中删除主键

编辑:不确定为什么将其标记为重复项。我得到的错误是不同的我正在尝试删除主键定义,但由于某种原因收到错误消息。mysql>ALTERTABLE`aux_sponsors`DROPPRIMARYKEY;ERROR1091(42000):Can'tDROP'PRIMARY';checkthatcolumn/keyexistsmysql>descaux_sponsors;+-------------+--------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+-------------+--

mysql - 主键中列的顺序,性能

出于性能原因,我有一个小问题。我正在使用symfony和doctrine。我总是在我的实体中使用注释,最近决定切换到yml文件。所以我从外部导出了所有实体并生成了yml文件。我将yml文件与数据库进行了比较。生成了一个diff文件,它将主键放在某些表上,然后添加它们,只是以不同的顺序。这些主键有多个列。似乎只有当其中一列是外键时才会发生这种情况。问题是我是否可以对我的数据库执行更改并切换关键列的顺序,或者这是否会影响我的性能? 最佳答案 MySQL中的主键是通过唯一索引实现的。事实上,对于当今的大多数(如果不是全部)SQLdbms来