2011-06-14 67 views
0

在MySQL中使用InnoDB,我想通过更好地利用聚集索引来加速选择,因此在主键中包含更频繁使用的列。InnoDBs聚集索引中的空值?

但是,一些频繁使用的列允许为空(有时是)。有没有办法将这些包含在聚集索引中(并允许它们为空)?

如果没有,是否有一些解决方法或有其他方法来做类似的事情?

+0

你真的认为扩大主要指数是明智吗?我不知道你的Db结构,或者你如何运行你的查询,但是从一开始就篡改主索引听起来是个坏主意。您始终可以在主字段开始的多个字段中添加编译(唯一)索引。关于你的NULL情况,是否可以将NULL值更改为空字符串值('')? – 2011-06-14 21:12:51

+0

我正在做一个简单的表上大约7个连接的选择。在试验时,我向PK添加了一个经常使用的列(该列仅用于获取它的数据,不加入或调用),那么查询时间从〜0.24s减少到〜0.11s。我希望对其他表格(如果不是相似的话)进行一些改进(因为它们具有相同的形式并且类似地使用)。唯一的问题是数据可能是NULL。如果这些是字符串值,我猜空字符串可以工作,但对于数字值,我不能使用0,因为它是有效值之一。 – Qtax 2011-06-14 23:00:52

+1

那么,对于任何类型的优化(添加适当的索引都是优化),规范化数据字段将会产生很大的差异。这不仅会使正在处理字段数据的脚本变得更简单,而且索引本身也会变得更简单(通常会降低基数)。至于你的PRIMARY,这应该是一个行ID(越简单/越小越好)。这些数字应该会发生任何类型的连接。当您将一个非连接列添加到PRIMARY时,它会加快速度,因为它会根据您的'WHERE'子句缩小要检查的行。 – 2011-06-15 02:25:32

回答

0

规范化表格以排除可空字段将在这种情况下工作(作为Battle_707的评论)。