草庐IT

Optimization

全部标签

mysql - SELECT COUNT with JOIN optimization for tables with > 100M rows

我有以下问题SELECTSUBSTRING(a0_.created_dateFROM1FOR10)ASsclr_0,COUNT(1)ASsclr_1FROMapplicationsa0_INNERJOINpackage_codesp1_ONa0_.id=p1_.application_idWHEREa0_.created_dateBETWEEN'2019-01-01'AND'2020-01-01'ANDp1_.type='Package1'GROUPBYsclr_0---编辑---你们中的大多数人都关注GROUPBY和SUBSTRING,但这不是问题的根源。以下查询具有相同的执行时间:

当表有其他字段时,Mysql 不使用 DATETIME 索引

我需要一些帮助来解决这个问题。我试图让Mysql在DATETIME字段上使用索引。如果表中有其他(未使用的)字段,Mysql决定不使用索引。考虑以下两种情况:一个包含2个字段的简单表格可以正常工作:DROPTABLEIFEXISTSdatetime_index_test;CREATETABLEdatetime_index_test(idINTUNSIGNEDNOTNULLAUTO_INCREMENT,createdDATETIMENOTNULL,PRIMARYKEY(id),INDEX(created))ENGINE=InnoDB;INSERTINTOdatetime_index_te

MySQL 优化过滤键值对作为记录

我有一个数据库结构,旨在以易于扩展的方式存储特定对象的属性。有一个“对象”表。+----+----------------------|id|....(name,type,etc)+----+----------------------接下来,我有一个“属性”表。+----+------+|id|Name|+----+------+最后,一个“关系”表,用于将所有数据保存为具有相应值的属性对象对(作为主键)。+--------+---------+-------+|id_obj|id_attr|value|+--------+---------+-------+我需要一次获取满足多个条

php - 在每个页面上进行检查时要使用 session 或数据库查询?

我的应用程序必须检查用户表中的多个数据才能创建页面。不仅仅是id和password,还有其他数据,目前大概有7部分信息。此检查在每个页面上进行。我是在session中加载所有这些数据,并从那里检查它,还是在每个页面请求时触发查询?不用说,还有其他查询正在进行中。关于优化,什么是更好的做法? 最佳答案 您应该从数据库中调用一次数据并将其存储在session变量中。我通常在用户首次登录时将我的user_id、用户名、电子邮件、用户名和access_levels放在session中,然后我可以在用户登录时在我的应用程序中的任何位置调用它们

php - 让 MySQL 找出日期间隔与 PHP

在MySQL5.1InnoDB环境中,根据日期间隔选择数据的最佳方法是什么?让MySQL通过类似DATE_SUB(CURDATE(),INTERVAL5DAY)>created_at或者让PHP通过strtotime准备提交前的日期? 最佳答案 我会通过对MySql的查询来完成。这样,您就可以将选择日期的逻辑保留在PHP之外。PHP仅处理显示,您还可以从数据库中获取更小的数据block。 关于php-让MySQL找出日期间隔与PHP,我们在StackOverflow上找到一个类似的问题:

php - 极慢的 MySQL 查询

我在MySQL中有两个表,table1有1,013,347个实体和38个属性,table2有7,343,905个实体和10个属性。在下面的查询中(应该是获取行数进行分页),table1.ID是一个PK,table2.ID是它的FK(都是有索引的),HAVING子句如果超过一定百分比就取值,在本例中为50%SELECTSQL_CALC_FOUND_ROWS*FROMtable1INNERJOINtable2ONtable1.ID=table2.IDWHEREtable1.attribute1LIKE'D%'GROUPBYtable2.IDHAVING(COUNT(table2.ID)*(

mysql - 优化where语句MYSQL

我正在编写这个复杂的查询以返回一个大型数据集,大约有100,000条记录。在我将此OR语句添加到WHERE子句之前,查询运行良好:AND(responses.StrategyFk=strategies.IdOrresponses.StrategyFkISNull)现在我明白了,将or语句放在那里会增加很多开销。没有那个声明,只是:ANDresponses.StrategyFk=strategies.Id查询在15秒内运行,但不会返回任何没有fk链接策略的记录。虽然我也想要这些唱片。有没有更简单的方法可以通过简单的where语句找到这两条记录?我不能只为空记录添加另一个AND语句,因为那

在左连接中使用 group by 的 MySQL 子查询 - 优化

MySQL似乎无法优化带有GROUPBY子查询的选择,结果执行时间很长。对于这种常见场景,必须有已知的优化。假设我们正在尝试从数据库中返回所有订单,并带有一个标志,指示它是否是客户的第一个订单。CREATETABLEorders(orderint,customerint,datedate);检索客户的第一批订单非常快。SELECTcustomer,min(order)asfirst_orderFROMordersGROUPBYcustomer;但是,一旦我们使用子查询将其与完整订单集连接起来,它就会变得非常慢SELECTorder,first_orderFROMordersLEFTJO

mysql - 有索引的查询比没有索引慢

我使用的是MySQL5.6,我的存储引擎是InnoDB。我有一个包含100万行的表,其中包含以下列:ID(主键)名字姓氏foreign_key_id(外键,非空)foreign_key_id2(另一个外键,默认为NULL)行在下面分隔:25%foreign_key_id值为1且foreign_key_id2NULL25%foreign_key_id值为1且foreign_key_id2NOTNULL25%foreign_key_id值为2且foreign_key_id2NULL25%foreign_key_id值为2且foreign_key_id2NOTNULL具有以下指标:在fore

php - 哪种方法更好地将相关数据存储在表中

我有一个关于在数据库中存储数据的简单但重要的问题。假设一个网站有100,000名用户。这些用户可以彼此成为friend。哪种存储方式比较理想方法一:在USERS表中创建一个friends字段。类型:文本将所有friendID保存在其中,用,将它们连接起来。示例:USER1的friend:2,3,4,5,6,...最差状态:所有用户彼此都是好友,每个用户都有一个FULLTEXT好友字段。所以在php端,应该用,分隔符分隔这个字段,这需要一些过程。方法B:做一个友谊表+------+---------------------+|uid|friend_id|+------+---------