在这个MySQL表定义中:
CREATE TABLE groups (
ug_main_grp_id smallint NOT NULL default '0',
ug_uid smallint default NULL,
ug_grp_id smallint default NULL,
KEY (ug_main_grp_id)
);
Run Code Online (Sandbox Code Playgroud)
什么是KEY关键字是什么意思?它不是主键,它不是外键,它只是一个索引吗?如果是这样,这种类型的索引有KEY什么特别之处?
当您在MS SQL Server(我使用的是版本2005)中的列或列数上创建索引时,您可以指定每列上的索引是升序还是降序.我很难理解为什么这个选择就在这里.使用二进制排序技术,任何一种查找都不会那么快吗?它选择哪个订单有什么区别?
我在文档中找不到这个问题的明确答案.如果列是数组类型,是否会对所有输入的值进行单独索引?
我创建了一个包含一int[]列的简单表,并在其上放置了一个唯一索引.我注意到我无法添加相同的整数数组,这使我相信索引是数组项的组合,而不是每个项的索引.
INSERT INTO "Test"."Test" VALUES ('{10, 15, 20}');
INSERT INTO "Test"."Test" VALUES ('{10, 20, 30}');
SELECT * FROM "Test"."Test" WHERE 20 = ANY ("Column1");
Run Code Online (Sandbox Code Playgroud)
索引是否有助于此查询?
非常简单的例子 - 一个表,一个索引,一个查询:
CREATE TABLE book
(
id bigserial NOT NULL,
"year" integer,
-- other columns...
);
CREATE INDEX book_year_idx ON book (year)
EXPLAIN
SELECT *
FROM book b
WHERE b.year > 2009
Run Code Online (Sandbox Code Playgroud)
给我:
Seq Scan on book b (cost=0.00..25663.80 rows=105425 width=622)
Filter: (year > 2009)
Run Code Online (Sandbox Code Playgroud)
为什么它不执行索引扫描?我错过了什么?
我需要添加适当的index表格,需要一些帮助.
我很困惑,需要澄清几点:
我应该为non-int列使用索引吗?为什么/为什么不呢
我已经读了很多关于clustered和non-clustered指数但我仍然不能确定何时使用一个比其他.一个很好的例子可以帮助我和许多其他开发人员.
我知道我不应该为经常更新的列或表使用索引.我还应该注意什么呢?在进入测试阶段之前我怎么知道这一切都很好?
sql-server indexing database-design clustered-index non-clustered-index
当一个整数列在SQLite表中被标记为主键时,是否应该为它显式创建索引?SQLite似乎不会自动为主键列创建索引,但考虑到其目的,它可能无论如何都要对其进行索引?(我会一直在搜索那个专栏).
对于字符串主键,情况会有所不同吗?
例如,我有一张homes桌子:
CREATE TABLE IF NOT EXISTS `homes` (
`home_id` int(10) unsigned NOT NULL auto_increment,
`sqft` smallint(5) unsigned NOT NULL,
`year_built` smallint(5) unsigned NOT NULL,
`geolat` decimal(10,6) default NULL,
`geolng` decimal(10,6) default NULL,
PRIMARY KEY (`home_id`),
KEY `geolat` (`geolat`),
KEY `geolng` (`geolng`),
) ENGINE=InnoDB ;
Run Code Online (Sandbox Code Playgroud)
是否有意义,我使用的复合指数都geolat和geolng,这样的:
我替换:
KEY `geolat` (`geolat`),
KEY `geolng` (`geolng`),
Run Code Online (Sandbox Code Playgroud)
有:
KEY `geolat_geolng` (`geolat`, `geolng`)
Run Code Online (Sandbox Code Playgroud)
如果是这样:
更新:
由于很多人都声明它完全依赖于我执行的查询,因此下面是最常见的查询:
SELECT * FROM homes
WHERE geolat BETWEEN ??? AND …Run Code Online (Sandbox Code Playgroud) 我有一张桌子A和一张桌子B. 在主键上A有一个外键,.BBB_ID
由于某种原因(我知道有正当理由)当我在密钥上加入这两个表时它没有使用索引.
我是否需要单独创建索引A.B_ID或者是否存在外键提供的索引?
假设我table在Rails应用程序中创建了一个表.一段时间后,我添加一个列运行:
rails generate migration AddUser_idColumnToTable user_id:string.
Run Code Online (Sandbox Code Playgroud)
然后我意识到我需要添加user_id为索引.我知道这个add_index方法,但是这个方法应该在哪里调用?我应该运行迁移(如果是,哪一个?),然后手动添加此方法?
我正在设计一个大型数据库.在我的应用程序中,我将有很多行,例如我目前有一个表有400万条记录.我的大多数查询都使用datetime子句来选择数据.在mysql数据库中索引datetime字段是一个好主意吗?
Select field1, field2,.....,field15
from table where field 20 between now() and now + 30 days
Run Code Online (Sandbox Code Playgroud)
我试图让我的数据库运行良好,查询运行顺利
更多,您认为我应该创建一个高效数据库的想法是什么?
indexing ×10
mysql ×3
postgresql ×2
sql ×2
sql-server ×2
arrays ×1
migration ×1
optimization ×1
oracle ×1
primary-key ×1
sequence ×1
sqlite ×1