Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
varchar和int的mysql列顺序_Mysql - Fatal编程技术网

varchar和int的mysql列顺序

varchar和int的mysql列顺序,mysql,Mysql,使用以下设备访问表时是否存在速度差异: INT,INT,INT,VARCHAR(255),VARCHAR(255),VARCHAR(255),VARCHAR(255),VARCHAR(255) OR INT,VARCHAR(255),VARCHAR(255),VARCHAR(255),VARCHAR(255),VARCHAR(255),INT,INT 如中所示,首先放置固定长度的列是否会加快速度 澄清一下:第一列INT是两者的索引,自动递增。它是myism,但innodb会有所不同吗?不幸

使用以下设备访问表时是否存在速度差异:

INT,INT,INT,VARCHAR(255),VARCHAR(255),VARCHAR(255),VARCHAR(255),VARCHAR(255)

OR

INT,VARCHAR(255),VARCHAR(255),VARCHAR(255),VARCHAR(255),VARCHAR(255),INT,INT
如中所示,首先放置固定长度的列是否会加快速度


澄清一下:第一列INT是两者的索引,自动递增。它是myism,但innodb会有所不同吗?不幸的是,我不知道如何在这个阶段以我预期的规模进行测试,因此我要求……(700万行)进一步,假设varchar中每个都填充了100个字符串,并且未进行优化。

使用您期望的数据进行测量,并亲自查看;)


说真的,这不应该是一个显著的区别-通过在该表上创建有用的索引,您将获得几个数量级的速度提升。

如果您的数据库是MyISAM,那么如果您的所有列都是固定的,您将只获得和加速查询的边缘,而不为固定大小的列创建索引。我的意思是,它将通过以下方式获得更快的响应:

INT,INT,INT,CHAR(255),CHAR(255),CHAR(255),CHAR(255),CHAR(255)
无论顺序如何,当我说“没有idex”时,我的意思是,如果使用表主键执行查询,它已经是唯一的索引,因此无论表是固定的还是非固定的,它都需要相同的时间。对于文本,为了提高文本搜索的速度,最好使用布尔全文搜索:。当然,为了快速工作,您需要在执行搜索的文本值中使用全文索引

InnoDB不会为您提供更好的响应时间,它用于处理事务和MyISAM中不可用的其他功能


如果您仍然需要更高的文本搜索速度,我建议您将表移动到Apache Lucene。

以上的答案集中在文本搜索速度上,忽略了问题的重点。他们还假设了一些关于索引和搜索的事情,但也没有抓住要点

所以,放弃对文本搜索的想法,因为它是不相关的

现在,如果你在一个整数字段上建立索引,无疑会很快。但是如果有几个整数字段呢。只使用一个索引(多索引不会提供您想要的内容)。如果搜索条件覆盖多个字段,那么将确定索引的最佳选择,并且您将在该字段上获得常规的减速。但是,当它必须检查其他条件时,它是否必须扫描列,或者它是否会根据索引提供的偏移量来优化它正在检查的列的位置?如果它必须在一百万行上执行此扫描,可以想象通过优化此知识可以大大降低复杂性,并且我们希望这仍然会发生,因为我们在提供可变长度/固定长度列方面做出了所有努力

上述答案中最有用的建议是在一大块数据上进行尝试。那是个好主意。我经常想知道这到底是什么,但我从来没有费心去检查。要设置问题,请尝试以下操作:

4列,int,int,int,text:int中的随机数,文本中的随机长度文本。记录您使用的值,生成一百万行。索引第一个int,用where语句搜索每个int值。每个搜索尝试100次,尝试10次搜索

下一步,相同的设置,除了将文本作为第二列而不是第四列。使用与第一次测试中使用的数据相同的数据。检查是否更快。

(“有用”取决于您将针对该表运行的查询)