草庐IT

Indexing

全部标签

mysql - 添加 JOIN 和 ORDER BY 查询后性能意外提升

我有以下People表:|Id|FirstName|Children||----|-----------|----------||1|mark|4||2|paul|0||3|mike|3|请注意,我在FirstName中有一个非唯一索引,在Children中有另一个索引。我需要获得每个有child的人的前10000个名字和child数量。所以我决定采用这种解决方案:SELECTfirstName,childrenFROMpeopleWHEREchildren>0ORDERBYchildrenDESCLIMIT0,10000问题是从一个有260万条记录的表中返回结果需要4秒。这是解释:|

mysql - SQL 查询 : Speed up for huge tables

我们有一个包含大约25,000,000行的表,称为“事件”,具有以下架构:TABLEevents-campaign_id:int(10)-city:varchar(60)-country_code:varchar(2)以下查询需要很长时间(>2000秒):SELECTCOUNT(*)AScounted_events,country_codeFROMeventsWHEREcampaign_id`in(597)GROUPYBYcity,country_codeORDERBYcounted_events我们发现这是因为GROUPBY部分。(campaign_id,city,country_c

MYSQL - 索引和优化选择查询

我有一个超过500万行的表。当我执行选择查询时,大约需要20秒。SELECTCompUID,WeburlFROM`CompanyTable`WHERE(Alias1='match1'ANDAlias2='match2')ORAlias3='match3'ORAlias4='match4'表结构如下:CREATETABLE`CompanyMaster`(`CompUID`int(11)NOTNULLAUTO_INCREMENT,`Weburl`varchar(150)DEFAULTNULL,`CompanyName`varchar(200)DEFAULTNULL,`Alias1`varc

mysql - MySQL 表中具有相同字段的两个索引

例如我们有表:CREATETABLE`my_tbl`(`id`int(11)NOTNULLAUTO_INCREMENT,`id_type`int(11)NOTNULL,`date`dateNOTNULL,`other_fields`varchar(200)CHARACTERSETlatin1NOTNULL,PRIMARYKEY(`id`),KEY`id_type`(`id_type`),KEY`type_date`(`id_type`,`date`)USINGBTREE)ENGINE=InnoDBDEFAULTCHARSET=utf8有两个索引:id_type和id_type,date

mysql - 使用 2 个连接和 group by 子句优化 mysql 查询

我有一个需要10-20秒的查询,但我确信它可以优化,我只是不够好。我需要一些帮助和解释,以便我可以将其应用于类似的查询。这是我的查询:SELECT`store_formats`.`StoreNbr`,`store_formats`.`StoreName`,`store_formats`.`FormatName`,`eds_sales`.`Date`,sum(`eds_sales`.`EPOSSales`)ASSales,sum(`eds_sales`.`EPOSQuantity`)ASQuantityFROM`eds_sales`INNERJOIN`item_codes`ON`eds_

具有多个索引的表的 mysql 索引优化,这些索引索引了一些相同的列

我有一个表,用于存储有关第三方网站访问者session的一些基本数据。这是它的结构:id,site_id,unixtime,unixtime_last,ip_address,uid有四个索引:id、site_id/unixtime、site_id/ip_address、site_id/uid我们查询此表的方式有很多种,而且都是特定于site_id的。带有unixtime的索引用于显示给定日期或时间范围内的访问者列表。其他两个用于查找来自IP地址或“uid”(为每个访问者创建的唯一cookie值)的所有访问,以及确定这是新访问者还是回访者。显然,将site_id存储在3个索引中对于写入速

MySql 添加索引 : 0 Rows Affected

Altertabletable1addindexcol1_idx(column1);即使表1有很多行并且所有列1的值都为非空值,但上面的查询显示“0行受影响”。为什么会这样? 最佳答案 这是因为查询不直接影响任何行,这与您修改行的更新语句相反。它(非常、非常、非常基本上)只会改变列的存储和排序方式。 关于MySql添加索引:0RowsAffected,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q

mysql - 按索引查询慢搜索 LIKE% MYSQL

我的表有100000000行这么大。表的结构idintINDEX(notprimarynotuniquejustindex)lang_indexvarchar(5)INDEXnamevarchar(255)INDEXenamvarchar(255)INDEX好的。我查询1条查询"SELECTnameFROMtableWHERElang_index='en'ANDnameLIKE'myname%'"这张大table的速度还可以。大约0.02秒。我试试2查询"SELECTnameFROMtableWHERElang_index='en'AND(nameLIKE'myname%'ORenam

mysql - MySQL什么时候更新索引

索引在更新/插入后究竟何时更新?是在更新/插入查询返回之前,还是在查询返回之后的某个时间,还是在执行使用索引的查询时。 最佳答案 索引更新是双重的。第一部分是在索引中插入/更新/删除条目。一旦记录发生更改,索引就会立即更新,并且此过程会阻塞查询直到完成。这允许根据索引列上的条件更快地检索记录,这是索引最容易理解的用途。第二部分是更新索引的统计信息。这允许优化器确定对于给定的查询是否值得使用索引。想象一下类似SELECT*FROMusersWHEREdisabled=0的查询。假设大多数用户实际上是活跃的。如果索引统计信息是最新的,优

mysql - MySQL中如何优化大表,什么时候可以从分区中受益?

总之,日期范围分区和内存配置实现了我的目标。我需要增加分配给的内存innodb_buffer_pool_size因为默认的8M太低了。瑞克詹姆斯推荐70%ofRAM对于这个设置,他有很多很好的信息。Edlerd对这两个建议都是正确的:-)我将数据拆分为每月分区,然后运行​​6,000行响应查询,该查询最初需要6到12秒。现在它可以在不到一秒的时间内完成(.984/.031)。我使用默认的innodb缓冲区大小(innodb_buffer_pool_size=8M)运行它以确保它不仅仅是内存增加。然后我设置innodb_buffer_pool_size=4G并以0.062/.032的更好