Questions tagged «index»

一种数据库结构,可以以磁盘空间为代价提高查询速度,并降低插入/更新的速度。它存储一个或多个排序的列的副本,但以不同的方式构造数据以允许更快地访问。

6
什么时候应该使用唯一约束而不是唯一索引?
当我希望一列具有不同的值时,我可以使用约束 create table t1( id int primary key, code varchar(10) unique NULL ); go 或者我可以使用唯一索引 create table t2( id int primary key, code varchar(10) NULL ); go create unique index I_t2 on t2(code); 具有唯一约束的列似乎是唯一索引的良好候选者。 是否存在使用唯一约束而不使用唯一索引的已知原因?

6
如何确定索引是必需的还是必需的
我一直在我们的MS SQL数据库上运行自动索引工具(我修改了源自Microsoft的脚本,该脚本查看索引统计表- 自动化自动索引)。现在,从统计信息中,我可以获得需要创建的索引的建议列表。 编辑: 上述索引从DMV那里获取信息,这些信息告诉您数据库引擎将使用哪些索引(如果索引可用),并且脚本采用Top x建议(按查找,用户影响等)并将它们放在表格中。 (上面的编辑部分摘自拉里·科尔曼(Larry Coleman)在下面的回答,以阐明脚本的作用。 由于我是数据库管理员的新手,并且已经在网上进行了快速搜索,因此我不愿意尝试并盲目添加推荐的索引。但是,由于没有该领域的经验,我正在寻找有关如何确定建议是否必要的建议。 我需要运行SQL事件探查器,还是最好检查查询表的代码?您还有其他建议吗?

4
在一系列时间戳上优化查询(两列)
我在Ubuntu 12.04上使用PostgreSQL 9.1。 我需要选择一段时间内的记录:我的表time_limits有两个timestamp字段和一个integer属性。我的实际表中还有其他列不涉及此查询。 create table ( start_date_time timestamp, end_date_time timestamp, id_phi integer, primary key(start_date_time, end_date_time,id_phi); 该表包含大约2M条记录。 进行以下查询需要花费大量时间: select * from time_limits as t where t.id_phi=0 and t.start_date_time <= timestamp'2010-08-08 00:00:00' and t.end_date_time >= timestamp'2010-08-08 00:05:00'; 所以我尝试添加另一个索引-PK的倒数: create index idx_inversed on time_limits(id_phi, start_date_time, end_date_time); 我感觉性能有所提高:访问表中间的记录的时间似乎更合理:介于40到90秒之间。 但是对于时间范围的中间值,仍然需要数十秒的时间。定位到表格末尾时(按时间顺序),则要多两倍。 我explain analyze第一次尝试获取此查询计划: Bitmap Heap …


3
复合索引对第一字段的查询是否也有用?
假设我有一个包含字段A和的表格B。我在A+ 上进行常规查询B,因此在上创建了一个复合索引(A,B)。A组合索引还会仅对查询进行完全优化吗? 此外,我在上创建了索引A,但Postgres仍然仅在上将复合索引用于查询A。如果前面的答案是肯定的,那么我认为这并不重要,但是如果单个A索引可用,为什么默认情况下为什么要选择复合索引呢?

5
PostgreSQL中的索引工作
关于PostgreSQL中索引的工作,我有几个问题。我有一个Friends具有以下索引的表: Friends ( user_id1 ,user_id2) user_id1并且user_id2是user表的外键 这些等效吗?如果没有,那为什么呢? Index(user_id1,user_id2) and Index(user_id2,user_id1) 如果我创建主键(user_id1,user_id2),它会自动为其创建索引并 如果第一个问题中的索引不相等,则在上述主键命令上创建哪个索引?

4
如何在没有密码提示的情况下使用psql?
我写了一个脚本来REINDEX索引数据库。这是其中之一: echo -e "\nreindex for unq_vbvdata_vehicle started at: `date "+%F %T"`" >> ${LOG_FILE} psql -U ${USERNAME} -h ${HOSTNAME} -d ${DBNAME} -c "REINDEX INDEX scm_main.unq_vbvdata_vehicle;" if [[ ${?} -eq 0 ]]; then echo "reindex for unq_vbvdata_vehicle finished at: `date "+%F %T"`" >> ${LOG_FILE} else echo "reindex for unq_vbvdata_vehicle failed" >> ${LOG_FILE} …
70 postgresql  index  psql 


4
索引搜索与索引扫描
在查看运行缓慢的查询的执行计划时,我注意到一些节点是索引查找,而某些节点是索引扫描。 索引搜索和索引扫描之间有什么区别? 哪个表现更好? SQL如何选择一个? 我意识到这是3个问题,但我认为回答第一个问题将解释其他问题。

4
MySQL:创建索引(如果不存在)
如果不存在,是否可以在MySQL中创建索引? MySQL不支持明显的格式: CREATE INDEX IF NOT EXISTS index_name ON table(column) ERROR 1064 (42000): You have an error in your SQL syntax;... MySQL版本(mysql -V)是5.1.48,但我认为MySQL CREATE INDEX IF NOT EXIST在所有版本中都缺乏此功能。 只有在MySQL中尚不存在索引时,才创建索引的正确方法是什么?



3
重建并重新索引所有内容后,为什么我的数据库仍然碎片化?
我有一个数据库,我试图通过运行以下T-SQL对所有表进行碎片整理: SELECT 'ALTER INDEX all ON ' + name + ' REORGANIZE;' + CHAR(10) + 'ALTER INDEX all ON ' + name + ' REBUILD;' FROM sys.tables 然后将输出复制并粘贴到新的查询窗口中并运行它。我没有任何错误,但是仍然有碎片。我也尝试单独运行两个命令,但仍然有碎片。注意:REORGANIZE Aaron 已使我意识到这是不必要的,并且我知道可以使用动态sql来自动执行此操作。 我运行此命令以确定我仍然有碎片: SELECT * FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, NULL) WHERE avg_fragmentation_in_percent > 0 我得到: database_id object_id index_id partition_number …

2
MySql中的VARCHAR字段上可能的INDEX
我正在使用这样的表在MySql数据库中工作: +--------------+ | table_name | +--------------+ | myField | +--------------+ ...并且我需要进行很多这样的查询(列表中有5-10个字符串): SELECT myField FROM table_name WHERE myField IN ('something', 'other stuff', 'some other a bit longer'...) 大约有24.000.000个唯一行 1)我应该使用FULLTEXTor或and INDEX键VARCHAR(150)吗? 2)如果我将字符数从150增加到220或250 ...会产生很大的不同吗?(有什么方法可以计算出来吗?) 3)正如我所说,它们将是唯一的,因此myField应该是PRIMARY KEY。在已经是VARCHAR INDEX / FULLTEXT的字段中添加PRIMARY KEY难道不是很罕见吗?

4
在索引中包含列的硬性和快速性规则
是否有任何硬性规定来决定应将哪些列以及应以什么顺序放入非聚集索引中。我只是在阅读这篇文章https://stackoverflow.com/questions/1307990/why-use-the-include-clause-when-creating-an-index ,我发现对于以下查询: SELECT EmployeeID, DepartmentID, LastName FROM Employee WHERE DepartmentID = 5 张贴者建议制作这样的索引: CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee(EmployeeID, DepartmentID) INCLUDE (Lastname) 这是我的问题,为什么我们不能像这样做索引 CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee( EmployeeID, DepartmentID, LastName) 要么 CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee( EmployeeID, LastName) INCLUDE (DepartmentID) 什么原因导致发布者决定保留“姓氏”列。为什么不另列?以及如何决定应以什么顺序将列保留在那里?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.