草庐IT

Indexing

全部标签

MySQL删除语句优化

我有一些删除查询要针对一些非常大的表(~100GB)运行,我想尽可能地优化它们:deletefromtable1wherecolumn1column1是datetime列,我假设为该列创建索引会加快删除速度。除此之外,我还能在这里做什么?使用date_sub()函数会减慢查询速度吗?我应该在运行查询之前计算该值吗?deletefromtable2wherecolumn2=x;column2是table2的主键,因此根据mysql文档,它已经是一个索引。我的问题是:索引种类是PRIMARY,和INDEX一样吗?我是否必须制作另一个INDEX类型的索引以加快速度?deletefromtab

mysql - 我应该索引什么?用户名还是用户 ID?

我有一个相当简单的表(原谅错误/愚蠢,我还在学习。为MySQL编写):CREATETABLEIFNOTEXISTS`userdata`(`userid`UNSIGNEDint(18446744073709551615)AUTO_INCREMENT,`username`char(255)NOTNULL,`password`char(255)NOTNULL,`salt`char(255)NOTNULL,`email`char(255)NOTNULL,PRIMARYKEY(`userid`));我读到过添加索引可以提高查询的性能,因为它不需要查看整个数据库。相反,它将查看索引并匹配数据(如果

mysql - 数据库索引用于同一组列的多个查询组合?

我正在寻求有关如何考虑对同一列集执行不同查询组合的表所需的最少索引数的指导。理想情况下,您的答案将从这个特定示例中抽象出一些经验法则(如果可能的话)。此项目符号列表代表三种通常在我的表上执行的不同查询条件:哪里race_type=?和可记录类型=?和事件=?哪里race_type=?和recordable_id=?和可记录类型=?和事件=?哪里user_id=?和种族类型=?和recordable_id=?和可记录类型=?和事件=?注:user_id(int),race_type(varchar),recordable_id(int),recordable_type(varchar),

mysql 在具有 1 亿行的表上创建索引

我的MySQL表很少——这些表大约有300列和1亿行。这些存储日志文件的数据,因此大小。我正在使用InnoDB引擎。很少有涉及这些表的连接的查询显然不起作用。我尝试向这些添加索引,但查询根本没有完成。我想知道是否有任何其他方法可以提高性能,或者有什么方法可以使“创建索引”在表上起作用?谢谢。 最佳答案 创建索引所花费的时间与表中的行数成正比。1亿行对于MySQL表来说是相当多的。在该表上创建索引可能需要许多小时。具体多长时间取决于其他因素,包括您的服务器硬件、您为其创建索引的列的数据类型、数据库的其他当前负载等。一个可以帮助您的工具

mysql - 为什么索引使这个查询变慢?

表有1500000条记录,其中1250000条的字段为“z”。我需要选择随机而不是“z”字段。$random=mt_rand(1,250000);$query="SELECTfieldFROMtableWHEREfield!='z'LIMIT$random,1";它工作正常。然后我决定优化它并在表中索引字段。结果很奇怪-慢了~3倍。我测试过了。为什么它更慢?这样的索引不是应该让它更快吗?我的ISAMexplainwithindex:idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEtablerangefiel

mysql - 表的所​​有列都应该被索引还是不应该是mysql数据库?

我想制作一个有4列的表格。一列是主键,另外三列是对其他表列的引用。我想用它来连接这四个表来做一个搜索过滤器。这些连接需要时间。我在想我应该为这些列建立索引,因为我读到在连接条件中使用的列上添加索引[使它们运行得更快]。我的问题是,如果表的所有列都被索引,会不会有问题?或者有没有其他方法可以降低搜索过滤器的时间复杂度。提前致谢。更多提示:表1(主搜索)-1000条首要的关键fk1fk2fk3表2-800条目pk1..(8-9列)表3-700条目pk2..(10-12列)表2-850条目pk3..(7-8列) 最佳答案 创建索引需要额外

mysql - 由于选择性低(所有 NULL),MariaDB 不在 1 列自连接上使用索引

我们有一个查询在我们的一个表中查找重复项,基于一个很少可用的标识符,我们称之为rareIdentifierINT(10)UNSIGNEDNULL。我们在此列上有一个单列常规旧索引。有问题的查询如下所示:SELECTa.id,b.idFROMwidgetaINNERJOINwidgetbONa.rareIdentifier=b.rareIdentifier;问题是,对于最近的重复查找运行,我们实际上有0行的值为rareIdentifier;即所有行都为该列设置了NULL。MariaDB决定不使用索引,而是选择扫描整个表的Usingjoinbuffer(flat,BNLjoin)方法。但是

sql - 使用大于运算符和 ORDER BY 的 MySQL 查询的索引帮助

我有一个至少包含几百万行的表和一个包含所有整数的架构,大致如下所示:startstopfirst_user_idsecond_user_id使用以下查询提取行:SELECT*FROMtbl_nameWHEREstop>=MANDfirst_user_id=NANDsecond_user_id=NORDERBYstartASCSELECT*FROMtbl_nameWHEREstop>=MANDfirst_user_id=NORDERBYstartASC我无法找到加速这些查询的最佳索引。问题似乎是ORDERBY,因为当我取出它时,查询速度很快。我已经使用标准索引格式尝试了所有不同类型的索引

mysql - 加速联合查询需要复合索引吗?

一位同事让我解释索引(索引?)如何提高性能;我尝试这样做,但自己也感到困惑。我使用下面的模型进行解释(错误/诊断日志数据库)。它由三个表组成:业务系统列表,包含其名称的“System”表不同类型的跟踪列表,表“TraceTypes”,定义可以记录哪些类型的错误消息实际跟踪消息,具有来自System和TraceTypes表的外键我在演示中使用了MySQL,但我不记得我使用的表类型。我认为是InnoDB。SystemTraceTypes-----------------------------------------------------------------------|ID|Nam

MySQL:强制查询在WHERE子句中使用带有局部变量的索引

语境我有一个应用程序,该应用程序从一个表中选择一个加权随机条目,对于这些条目,前缀总和(权重)是至关重要的部分。简化的表定义如下所示:CREATETABLEentries(idINTNOTNULLPRIMARYKEYAUTO_INCREMENT,weightDECIMAL(9,3),fenwickDECIMAL(9,3))ENGINE=MEMORY;其中`fenwick`将值存储在`weights`的Fenwick树表示形式内。让每个条目的“范围”跨越其前缀和及其前缀和权重之间。应用程序必须在@r和0之间生成一个随机数SUM(weight),并找到范围包括@r的条目,如下所示:Fenw