在四个列上创建索引?

9 浏览
0 Comments

在四个列上创建索引?

我有一个表格,用于根据起点和终点的经纬度获取驾车时间。尽管我使用Google的API来查找新的通勤时间,但我会将之前查询结果存储在本地,这样如果需要再次查询相同的驾车时间,就不必使用Google了(Google的网络服务有限制)。总之,该表格包含五列:

    起点纬度(smallmoney)
    起点经度(smallmoney)
    终点纬度(smallmoney)
    终点经度(smallmoney)
    驾车时间(整数,以秒为单位)

(事实证明,小金额对经度和纬度非常适用,只要你只需要小数点后四位数字,这对于这个应用来说足够精确了。)

我的问题是:为了SELECT查询的最佳性能,我应该给这四个经度/纬度列都建立索引吗?

还有一个问题:我们可以假设删除操作不会经常发生,但随着表格的增长,插入操作仍然会有大约25%的频率。 因此,给这四个列都建立索引会对插入操作有害吗?

0
0 Comments

原因:问题的出现是因为在搜索时需要同时查询四个列,而且考虑到性能优化的因素,需要对这四个列进行索引。

解决方法:首先,需要对这四个列进行索引。其次,需要调整索引的padding值。较高的padding值可以减少对索引的重新分页操作,这对写入操作有好处,但对读取操作来说是一种负担。较低的padding值对读取操作更加有利。建议先对这四个列进行索引,然后逐渐调整padding值,找到最佳的设置。

代码:

CREATE INDEX index_name ON table_name (column1, column2, column3, column4);

文章如下:

如果你需要同时在四个列上进行搜索,那么很可能你需要对它们进行索引。

还有一个因素需要考虑,那就是索引的padding设置。较高的padding值可以减少对索引的重新分页操作(实际上不是叫重新分页,但我暂时想不起来这个词了),这对写入操作来说是有益的,但对读取操作来说是一种负担。相反,较低的padding值对读取操作更加有利。

我会对这四个列进行索引,并且根据实际情况调整padding值来找到最佳设置。

啊,是的,直到今天我才听说过padding这个词。但我在概念上理解了。谢谢。

代码:

CREATE INDEX index_name ON table_name (column1, column2, column3, column4);

0
0 Comments

在处理包含经度(long)和纬度(lat)列的数据时,添加索引可以提高查询(读取)性能,但会牺牲插入/更新/删除(写入)性能。

在添加索引之前和之后测量性能,以确定是否适合添加索引。

问题的原因:在处理包含经度和纬度列的数据时,查询性能可能较低,因为数据库需要对每个查询进行完整的扫描。为了提高查询性能,可以考虑添加索引。

解决方法:可以通过为经度和纬度列添加索引来提高查询性能。索引是一种数据结构,可以加快数据库的查询速度。当数据库收到查询请求时,它可以使用索引来快速定位和检索符合条件的数据。

在添加索引之前和之后,我们需要测量性能,以确定是否适合添加索引。可以通过以下步骤进行测量:

1. 在添加索引之前,记录查询的执行时间。可以使用数据库的性能分析工具或编写自定义的测试脚本来测量查询性能。

START_TIME = current_time()

# 执行查询操作

END_TIME = current_time()

EXECUTION_TIME = END_TIME - START_TIME

2. 添加索引到经度和纬度列。

CREATE INDEX index_name ON table_name (longitude_column, latitude_column);

3. 在添加索引之后,再次记录查询的执行时间。

START_TIME = current_time()

# 执行查询操作

END_TIME = current_time()

EXECUTION_TIME = END_TIME - START_TIME

4. 比较添加索引之前和之后的执行时间。如果添加索引后的执行时间明显减少,那么索引的添加是有效的。如果执行时间没有明显变化或者变得更长,那么可能需要重新考虑是否添加索引。

通过测量性能并比较执行时间,可以确定是否适合添加索引。请注意,添加索引可能会增加数据库的存储空间,并在插入、更新和删除操作时导致性能下降。因此,在决定是否添加索引时,需要平衡查询性能和写入性能之间的权衡。

0