2009-09-20 61 views
0

我正在构建一个相当庞大的数据库 - 它有大约690万条记录。如何在SQL中使用索引

一个简单的选择需要6-7秒,所以我现在正在优化和调查其他选项。

显而易见的是创建一个或两个索引。

样品:

CREATE INDEX “INDEX_NAME” ON “表格名”(列)

运作良好。

但是,我无法获得有效的sql语法以在select语句中使用索引。一个假设你可以使用“从table_name选择index_name”,至少我做了:)但是它似乎是无效的,我不能在我的生活中找到一个网上的例子,这或者意味着我来自完全错误的角度,或没有人记录它...

任何关于如何使用索引的帮助将不胜感激!

+0

你对表中的任何主键?如果你这样做,那么主键将在表上创建聚集索引。如果你有另一个唯一索引表,将在表上创建非聚集索引。还有一件事会影响你的表现,就是你的索引字段的大小。尺寸越小,搜索或连接越快,因为它会影响数据页面上的实际数据行。 – Nirlep 2009-09-20 18:06:51

回答

4

你并不需要显式地指定要在数据库中使用索引。数据库优化器将看看它知道可用的索引和算法回答您的查询,(希望)选择手头任务的最佳方案。

所以你只需要像以前一样从你的表中进行选择;数据库将自动“做正确的事情”。

因为即使是最有经验的开发人员,优化器也有点不透明,所以在开发查询以查看为其生成的“执行计划”时非常重要。您可以使用数据库的EXPLAIN命令的风格来查看计划。

有艺术来设置正确的索引。下面是一个最近的例子,它通过了什么算法和索引组合对于MySQL数据库中的某些种类的选择是最好的:http://www.mysqlperformanceblog.com/2009/09/19/multi-column-indexes-vs-index-merge/这可能有点太高级了,现在对你没有用处,但通读它以获得一种感觉优化器试图找出的东西的种类。

0

我认为这可能取决于你使用的是哪一种dstabase,但是对于我对于SQL Server(2000,2005,2008)的体验来说,并不需要担心索引名称。您只需在您经常用作查询过滤器的列(WHERE子句或连接)上创建它,然后正常执行查询。数据库服务器会在它认为可以提供帮助时小心使用该索引。

希望这有助于

1

我不认为你了解索引是如何工作的。您在索引列上执行选择的方式与您在索引列上执行选择的方式相同。

0

数据库将使用这些指示符而不告诉它。这是查询优化器将执行的操作。

查看查询计划 - 例如对 选择Sybase和SQL服务器OS 集SHOWPLAN .....

如果使用索引

在你做奇怪的场合这将显示需要强制指标,但这种情况很少见

2

SQL Server将尝试dertermine该指数将是最适合你写的查询。这将通过统计他对各种指数的帮助完成。 (你可以为每个表一个以上的指数,但你应该限制在创建索引的数量)

你也可以创造的东西那卡列斯覆盖索引。这是一个索引,它将包含查询的所有字段。这允许SQL Server只查询索引,而不是索引的表。

您还可以选择在查询中创建索引提示以强制sql server选择一个索引而不是另一个索引,但不应该使用该选项,而是应使索引上的统计数据保持最新。

希望帮助

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

沃伦·布赖恩·迪诺罗尼亚