我需要帮助了解如何创建索引。我有一个看起来像这样的表
我的查询如下:
SELECT *
FROM table1
WHERE name = 'sam'
如果查询具有按语句排序,该怎么办?
SELECT *
FROM table1
WHERE name = 'sam'
ORDER BY id DESC
如果我在where语句中有2个参数怎么办?
SELECT *
FROM table1
WHERE name = 'sam'
AND age > 12
答案 0 :(得分:5)
使用包含列创建索引的正确方法?通过Management Studio / Toad / etc或SQL(documentation):
CREATE INDEX idx_table_1 ON db.table_1 (name) INCLUDE (id)
ORDER BY
ORDER BY
可以使用索引,如果优化器认为合适(由表统计和查询确定)。您可以通过查看查询成本来测试复合索引或带有INCLUDE
列的索引是否最佳。
如果id
是群集密钥(虽然不总是主密钥),我可能不会包含该列...
与上述相同 - 您需要测试哪种方法最适合您的查询。可能是复合,包含或单独的索引。
但请记住:
我强烈建议您阅读Kimberly Tripp的“The Tipping Point”,以便更好地了解指数决策和影响。
答案 1 :(得分:0)
由于我不知道您的数据库将要实现哪些确切的任务以及其中包含多少记录,因此我建议您查看Index Basics MSDN文章。它将允许您自己决定要创建哪些索引。
答案 2 :(得分:0)
如果ID
是您的主要和/或聚集索引键,只需在Name, Age
上创建索引即可。这将涵盖所有三个查询。
包含的字段最适用于检索不在筛选器列表中的列的行级值,或检索排序字段位于GROUP BY
子句中的聚合值。
答案 3 :(得分:-1)
如果插入很少,请创建所需数量的索引。
对于第一个查询,为name列创建索引。
Id列我认为已经是主键......
创建名称和年龄的第二个索引。你只能保留一个索引:'name,ag'e,第一次查询的速度不会太慢。