问题标签 [database-indexes]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - 我应该添加多个索引吗?
如果我在包含 2 个字段的表上有一个唯一索引,我应该在每个字段上添加另一个索引吗?
例子:
我的表如下所示:
然后我添加了一个唯一索引,它涵盖了usersID
和userTypesID
:
是否值得我再添加 2 个索引,一个上一个usersID
,另一个上userTypesID
?例如:
添加这些额外的索引会加速某些查询吗?如:
或者
mysql - MySQL/InnoDB:最好有两个非唯一索引列或将它们组合在唯一主键中?
我将 MySQL 与 InnoDB 一起使用。
就语义而言,我不需要主键,那么主键(或者更确切地说,唯一索引)是否比非唯一索引更快查询?
我有两列适合索引但不唯一。但是,两列的组合始终是唯一的。这些列也是非空的。
将两个非唯一列设置为索引,还是在两列的组合上创建一个主键更好?
访问模式通常会修改两行或四行,其中第一列是给定值(第二列将不同,正如我提到的每个组合都是唯一的)。
例如, col1 和 col2 就像
1 1
1 2
1 3
1 5
2 1
2 2
2 3
2 5
3 1
3 2
3 3
一个示例是一次更改行 (1, 2) 和 (1, 3)
一个后续问题是关于数据类型的。col1 适合 smallint, col2 适合 tinyint。但是,我不确定在组合成单个索引时使用小于 int 类型和不同类型的性能影响是什么。该手册说,当用于主键时,多个列被连接起来。使用相同的类型smallint会更好吗?甚至使用整数?在内存访问方面,不对齐,全字访问最快?这对这里有影响吗?
mysql - Mysql有效索引
目前我正在创建索引,因为我需要它们用于特定的 sql 查询。但它们开始相互重叠。
有什么规则可以有效地定义它们吗?
例如:
- 如果我有 column1 和 column2 的两个索引,column1、column2 的复合索引是否改进了两列的选择?
- column1 和 column2 的索引与 column2 和 column1 的索引之间有什么区别?
mysql - 如何优化 MySQL 数据库/查询
嗨,我希望我能在如何优化我的数据库方面得到一些帮助,这样不需要一年。我知道要加快速度,我需要添加索引,但我不确定我应该在什么上添加它们。
这是我数据库中的三个表:
表 JourneyPattern2 包含约 33000 行,journeyPatternTimingLink2 包含约 1300 万行,线路和服务约 70000 行。
我要优化的查询如下
我以前从未真正使用过这种大小的桌子,所以我不确定我是否一开始就正确加入。我还上传了我在 phpmyadmin 的查询上运行 EXPLAIN 的屏幕截图,但我不确定如何解释结果,因此将不胜感激。
谢谢你的帮助。
mysql - mysql 和多于一列的索引
如何使用多于一列的索引
原始索引有一个索引 on block_id
,但是当它已经在具有两列的唯一索引中时是否需要?
具有多于一列的索引
(a,b,c)
- 您可以搜索 a、b 和 c
- 你可以搜索 a 和 b
- 你可以搜索一个
- 你不能搜索 a 和 c
这也适用于唯一索引吗?
桌子
索引来源
索引替代
sql - 使用 sqldeveloper 为多个索引生成 SQL
我最近将一个 Oracle 数据库导出到一个新环境。不幸的是,许多索引未能创建。我想知道是否有一种方法可以为各种这些生成 sql。
例如,我知道如果您选择一个表并单击顶部列表中的“SQL”选项卡,它将自动生成 sql 输出。(见屏幕截图)但是,我需要为大多数(如果不是全部)整个数据库执行此操作。这是我最感兴趣的索引。
mysql - MySQL 按日期查询大倒数
我有 2200 万条记录的大桌子。我想执行下一个查询:
为了提高性能,我为 endData 字段添加了 BTREE 索引:
在我开始分析查询执行计划之后:
当我想获取 15 到 7 天前的参数时:
我得到了下一个执行计划来处理 2,762,088 行。
当我将间隔增加一天时,我收到:
EXPLAIN 表示 MySQL 计划处理所有 22,923,126 行。
例如在 WHERE 进程 22,925,642 中选择不带任何条件。
我可以改进执行计划吗?也许我在某个地方有错误,或者是正常的 MySQL 行为?
mysql - 如何知道 MySQL 中使用了哪些索引?
我的 MYSQL 数据库中有一个表,其中创建了许多索引,但我不知道这些索引中的哪些有用,哪些没有。我想知道生产中使用的索引是什么。
有没有办法使用索引日志?
我知道 EXPLAIN 命令,但这是针对一个特定查询的。我有一个复杂的系统,所以我无法确切知道正在使用的查询是什么。我可以打开通用日志,获取所有查询并对所有查询进行解释,然后获取汇总结果,但必须有一种更简单的方法来做到这一点。
concurrency - POSIX 的 read() 和 write() 系统调用是原子的吗?
我正在尝试基于Lehman 和 Yao 在本文中建议的数据结构(B链接树)和算法来实现数据库索引。在第 2 页中,作者指出:
磁盘被划分为固定大小的部分(物理页;在本文中,这些对应于树的节点)。这些是唯一可以被进程读取或写入的单元。[强调我的](...)
(...) 允许进程锁定和解锁磁盘页面。该锁赋予该进程对该页面的独占修改权限;此外,进程必须锁定页面才能修改该页面。(...)锁 不会阻止其他进程读取锁定的页面。[强调我的]
我不完全确定我的解释是否正确(我不习惯阅读学术论文),但我认为可以从强调的句子中得出结论,作者的意思是读取和写入页面的操作被假定为“原子” ,从某种意义上说,如果进程 A 已经开始读取(相应地写入)页面,则另一个进程 B 可能不会开始写入(相应地读取)同一页面,直到 A 完成其读取(相应地写入)操作. 多个进程同时读取同一个页面当然是合法的条件,因为多个进程同时在完全不同的页面上执行任意操作(页面 P 上的进程 A,页面 Q 上的进程 B,页面 R 上的进程 C 等)也是如此。 )。
我的解释正确吗?
我可以假设 POSIX'
read()
和write()
系统调用在上述意义上是“原子的”吗?我是否可以依靠这些具有一些内部逻辑的系统调用来根据文件描述符的位置和要读取或写入的块的指定大小来确定是否应该暂时阻止特定read()
或调用?write()
如果上述问题的答案是“否”,我应该如何推出自己的锁定机制?
postgresql - Text[] 数组列的表索引
我有一个 PostgreSQL 数据库表,text[]
上面定义了(数组)列。我正在使用这些列以这种方式搜索数据库中的特定记录:
我遇到的问题是大约有 100 万条记录,查询变得非常慢。我的问题很简单,数组列有不同类型的索引吗?有人知道在这种情况下要创建的最佳索引类型吗?(假设有不同的类型)。
以防万一,这是explain analyze
响应:
提前致谢!