使用以下方式访问表时是否存在速度差异:
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是两者中的索引,自动递增。它的神话,但是innodb会有所作为吗?不幸的是,我没有已知的方法来测试我在这个阶段所期望的规模,因此要求......(700万行)此外,假设varchars每个都填充100个字符串并且未经优化。
答案 0 :(得分:1)
如果您的数据库是MyISAM,那么只有在修复了所有列的情况下,您才能获得没有固定大小列索引的查询并加快速度。我的意思是,它会使用以下方式获得更快的响应:
INT,INT,INT,CHAR(255),CHAR(255),CHAR(255),CHAR(255),CHAR(255)
无论订单是什么,当我说“没有idex”时,我的意思是,如果你使用你的表主键执行查询,它已经是唯一索引的,所以无论你的表是什么固定,它都会采取同时。对于文本,为了在文本搜索中获得速度增加,最好使用布尔全文搜索:http://dev.mysql.com/doc/refman/5.1/en/fulltext-boolean.html。当然,为了使其快速运行,您需要在正在执行搜索的文本值中使用FULLTEXT索引。
InnoDB不会为您提供更好的响应时间,它用于处理事务以及MyISAM中没有的其他功能。
如果您仍需要更快的文本搜索速度,我建议您将表格移至Apache Lucene。
答案 1 :(得分:1)
以上答案主要关注文本搜索的速度,忽略了问题的重点。他们还假设关于索引和搜索的一些事情也忽略了这一点。
因此,放弃对文本搜索的看法,因为它是无关的。
现在,如果你对一个整数字段进行索引,毫无疑问它会很快。但是如果你有几个整数字段呢?只使用一个索引(多索引不会给你你想要的东西)。如果搜索条件超过多个字段,则将确定索引的最佳选择,并且您将获得常规速度提升。但是,当必须检查其他标准时,是否必须扫描列,或者它是否会根据索引提供的偏移量来检查存在的列的位置?如果它必须在一百万行上进行扫描,可以想象通过优化这些知识可以大大降低复杂性,并且人们希望这仍然会发生,因为我们在提供不同长度/固定长度的列时付出了所有这些努力。
上述答案中最有用的建议是尝试大量数据。那是个好主意。我经常想知道这一点,但我从来没有费心去检查。要设置问题,请尝试以下操作:
4列,int,int,int,text:ints中的随机数,文本中的随机长度文本。记录您使用的值,制作100万行。对第一个int进行索引,在每个int值上使用where语句进行搜索。尝试每次搜索100次,尝试10次搜索。
下一步,相同的设置,除了将文本作为第二列而不是第四列。使用与第一次测试中使用的数据相同的数据。检查一下它是否更快。
答案 2 :(得分:0)
使用您希望拥有的数据进行测量并亲自查看;)
说真的,它不应该是一个显着的差异 - 你可以通过在该表上创建有用的索引来提高几个数量级的速度。