我有一个GeoIP位置数据库,其IP地址表的起始和结束列是适用于相应位置记录的IP地址范围(即城市,州等)。块表有大约540万行数据。当我搜索特定的IP地址(下面的例子)时,搜索查询非常慢。有没有更好的方法来重新设计select语句或表来提高性能?选择一系列数字时选择速度较慢
SELECT [locationID] FROM [GeoLocationView] where (GeoLocationView.startipNum <= ip) and (GeoLocationView.endipnum) >= ip)
表如下所示
CREATE TABLE [dbo].[GeoCity_Blocks](
[id] [int] IDENTITY(1,1) NOT NULL,
[startIpNum] [bigint] NOT NULL,
[endIpNum] [bigint] NOT NULL,
[locId] [int] NOT NULL,
CONSTRAINT [PK_GeoCity_Blocks_A] PRIMARY KEY CLUSTERED
(
[startIpNum] ASC,
[endIpNum] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
你的执行计划是什么样的? – 2012-03-12 15:26:23
你的桌子上是否有任何索引? – Lamak 2012-03-12 15:29:52
您给我们定义了一个表格,但您似乎是从视图中进行选择。视图定义是什么样的?这个视图中的所有选择都很慢,还是仅仅是这个? – 2012-03-12 15:30:27