解决方法
这是我适用于sql Server的专有技术:
首先,sql Server中的索引在其索引条目中最多只能有900个字节.仅这一点就不可能有一个包含所有列的索引.
最重要的是:这样的指数毫无意义.你想要实现什么?
考虑一下:如果你有一个索引(LastName,FirstName,Street,City),那么该索引将不能用于加速查询
>仅限FirstName
>城市
>街
该索引对搜索有用
>(LastName),或
>(LastName,FirstName),Street),City)
但实际上没有别的 – 如果你只搜索街道或只是城市,肯定不会!
索引中列的顺序有很大不同,查询优化器不能只使用索引中间某处的任何列进行查找.
考虑一下你的电话簿:它的订单可能是LastName,也许是Street.那么索引是否可以帮助您找到您所在城市的所有“Joe’s”?所有人都住在“主街”?不 – 您可以先通过LastName查找 – 然后在该组数据中获得更具体的信息.只是对所有内容都有索引并没有帮助加速搜索所有列.
如果您希望能够通过街道搜索 – 您需要在(街道)上添加单独的索引(可能还有另外一列或两列有意义).
如果你想能够通过职业或其他任何东西进行搜索 – 你需要另一个特定的索引.
仅仅是因为你的列存在于索引中并不意味着它会加速对该列的所有搜索!
主要规则是:使用尽可能少的索引 – 对于一个系统来说,太多的索引可能比没有索引更糟糕……建立你的系统,监控它的性能,找到那些成本最高的查询 – 然后优化这些,例如通过添加索引.
不要只是因为你可以盲目索引每一列 – 这是糟糕的系统性能的保证 – 任何索引也需要维护和维护,所以你拥有的索引越多,你的INSERT,UPDATE和DELETE操作就越多(得到因为所有这些指数都需要更新.