sql索引和性能调优

sql索引和性能调优,sql,Sql,我是sql新手,但我正在学习,我有一个论坛,人们可以使用半径和纬度搜索位置,网站加载速度非常慢,搜索字段索引是否合适?我已经读到,索引不应该用在go下更新和创建的表上,但我不知道我还能做些什么来提高性能。我在考虑可能创建一个具有相同信息的相同表,并将其仅用于具有索引的搜索 "Select * from threads where latitudes >= @ThirtyLatMin AND @ThirtyLatMax >= latitudes AND longitudes >=

我是sql新手,但我正在学习,我有一个论坛,人们可以使用半径和纬度搜索位置,网站加载速度非常慢,搜索字段索引是否合适?我已经读到,索引不应该用在go下更新和创建的表上,但我不知道我还能做些什么来提高性能。我在考虑可能创建一个具有相同信息的相同表,并将其仅用于具有索引的搜索

"Select * from threads where latitudes >= @ThirtyLatMin AND @ThirtyLatMax >= latitudes AND longitudes >= @ThirtyLonMin AND @ThirtyLonMax>=longitudes order by activities desc"

任何现代RDBMS都应该能够处理给定表上的几个索引;虽然索引维护在表插入和更新期间确实有成本,但在SELECT语句(和其他查询)期间适当的索引利用率通常会超过该成本

根据您的问题(和示例查询),提供一些一般提示:

  • 只返回您需要的数据;在性能调优时,在查询中使用SELECT*通常是一个危险信号,因为这意味着编码人员没有花时间详细说明调用应用程序需要什么。如果您返回了一堆未使用的数据,则会影响性能

  • 一旦指定了要返回的列,尝试用索引“覆盖”它们;换句话说,创建一个包含满足查询所需的所有信息的索引列。请注意,当处理多个不同的查询(不同的列)时,这将成为一种平衡行为。表上索引过多会增加成本(请参见页眉),最终可能会超过其好处。注意,不同的RDBMS有不同的处理方法;例如,MicrosoftSQLServer使用INCLUDE语法来表示覆盖容量中广泛的多列索引,而不会产生大量开销

  • 不仅索引返回的列,而且使索引的第一列成为WHERE子句中使用的列。从上面的例子中,我放置了一个以纬度和经度开始的索引,并包含了剩余的必要列

  • 尽可能将排序从数据库中移出。排序是昂贵的操作,除非您使用它来帮助过滤数据(即,前N个搜索),否则您可能会看到将其移出SQL的改进

  • 我已经读到,索引不应该用在go下更新和创建的表上

    我很想看看你在哪里读到的,因为那是不正确的。索引对性能至关重要


    请阅读SQL中索引的详细介绍。

    如果您说第一页速度非常慢,那么问题应该在SQL以外的其他级别解决,可能您可以检查启动代码,可能该页上的图像可以缩小而不丢失可接受的质量,以便搜索,是的,这将是一个好主意,索引那些列在搜索中使用感谢你的解释,真的清除了很多。