【发布时间】:2013-10-08 19:29:12
【问题描述】:
我正在使用在 windows datacenter 2012 上运行的 SQL SERVER 2012,
我有一个数据库,其中包含如下构建的表:
[ID] (pk,int not null)
[Start] (float,null)
[End] (float, null)
[CID] (int,null) --country id
我有一个获取 IP 的网络服务,将其转换为十进制 (可以参考这个:IP address conversion to decimal and vice versa)并向数据库服务器请求国家/地区ID
首先提到的表格包含约 200K 行,其中开始和结束值表示 IP 范围(十进制)以及与每个范围相关的 countryid,
在处理一些繁重的流量时,我遇到了非常高的 CPU 使用率,所以我在开始列和结束列上添加了索引,之后 CPU 变得更好了一点,但我认为它应该更多,它的只是假设在排序列表中搜索应该非常快,尽管我添加索引的预期结果与现实相去甚远,
我想这是因为它不是搜索列表而是搜索范围
什么是有效处理这种情况的最佳方法,因为我确信这个简单的操作占用我的资源比它应该的要多。
这是来自活动监视器的图片(索引后流量较低):
这是在 Azure ExtraLarge VM(8 核 14GB 内存)上运行的 - vm 什么都不做,只是运行一个带有 1 个表的 sql server,它只翻译这个 1 个请求!在这种较低流量上的 VM CPU 约为 30%,在较高流量上约为 70%,我相信一些结构/逻辑更改应该可以让一个非常小的服务器\服务轻松处理这个问题。
【问题讨论】:
标签: sql sql-server performance indexing virtual-machine