我正在建立一个相当大的数据库 - 它有大约690万条记录。
一个简单的选择需要6-7秒,所以我现在正在优化和调查其他选项。
显而易见的是创建一两个索引。
样品:
在“TABLE_NAME”(COLUMN_NAME)上创建INDEX“INDEX_NAME”
效果很好。
但是,我无法获得有效的sql语法来在select语句中使用索引。一个假设您可以使用“从table_name中选择index_name”,至少我做了:)但它似乎无效,我不能为我的生活在网上找到一个例子,这或者暗示我来自于完全错误的角度,或者没有人记录它...
任何有关如何使用指数的帮助都将受到赞赏!
答案 0 :(得分:4)
您无需显式指定希望数据库使用的索引。数据库优化器将查看它对可用索引和算法的了解,以便回答您的查询,并(希望)为当前任务选择最佳计划。
所以你只需要像以前一样从你的桌子中选择;数据库将自动“做正确的事”。
由于优化器对于经验最丰富的开发人员来说有点不透明,因此在开发查询以查看为其生成的“执行计划”时,这一点非常重要。您可以使用数据库的EXPLAIN命令风格来查看计划。
设置正确的索引是艺术。这是一个最近的例子,它通过什么算法和索引组合最适合MySQL数据库上的某些选择:http://www.mysqlperformanceblog.com/2009/09/19/multi-column-indexes-vs-index-merge/这可能有点太高级,现在对你没用,但是通读它到感受优化者试图为你找到的各种事物。
答案 1 :(得分:2)
SQL Server将尝试确定哪个索引最适合您编写的查询。这将在他对各种指数的统计数据的帮助下完成。 (每个表可以有多个索引,但是你应该限制你创建的索引数)
您还可以创建一些可以覆盖索引的内容。这是一个索引,它将包含查询的所有字段。这允许SQL Server仅查询索引,而不查询它正在索引的表。
您还可以选择在查询中创建索引提示以强制sql server优先选择一个索引而不是另一个索引,但不应该使用该选项,而是在索引上保持最新的统计信息。
希望有所帮助
答案 2 :(得分:2)
如果你使用MySQL,你可以指定使用或不使用哪个索引。
SELECT * FROM table1 USE INDEX (col1_index,col2_index)
WHERE col1=1 AND col2=2 AND col3=3;
SELECT * FROM table1 IGNORE INDEX (col3_index)
WHERE col1=1 AND col2=2 AND col3=3;
您可以在此处找到更多信息:http://dev.mysql.com/doc/refman/5.1/en/index-hints.html
Warren Brian Noronha
答案 3 :(得分:1)
我认为您不了解索引的工作原理。您在索引列上执行选择的方式与在索引列上执行选择的方式相同。
答案 4 :(得分:0)
我认为这可能取决于你使用哪种dstabase,但是根据我对SQL Server(2000,2005,2008)的体验,我不必担心索引名称。您只需在查询(WHERE子句或联接)中经常用作过滤器的列上创建它,然后正常执行查询。数据库服务器只要认为它可以提供帮助就会小心使用索引。
希望这有帮助
答案 5 :(得分:0)
数据库将在不告知您的情况下使用指标。这是查询优化器将要执行的操作。
查看查询计划 - Sybase和sql-server os的示例 设置showplan 选择.....
这将显示是否使用了索引
在奇怪的情况下,你需要强制指数,但这很少见