草庐IT

mysql - 从mysql中的大表中快速选择随机行

从大型mysql表中选择随机行的快速方法是什么?我正在使用php,但我对任何解决方案都感兴趣,即使它是另一种语言的。 最佳答案 获取所有id,从中随机选择一个,然后检索整行。如果您知道id是连续的,没有孔,您可以获取最大值并计算随机id。如果这里和那里有漏洞但大部分是顺序值,并且您不关心稍微偏斜的随机性,请获取最大值,计算一个id,然后选择id等于或高于那个的第一行你计算过。倾斜的原因是id跟随这样的洞比跟随另一个id的洞更有可能被选中。如果您随机订购,您将面临可怕的表格扫描,而quick这个词不适用于这样的解决方案。不要这样做,也

java - 优化大表上的 MySQL 查询

我将mysql与JDBC结合使用。我有一个大型示例表,其中包含630万行,我正在尝试对其执行高效的选择查询。见下文:我在表上创建了三个额外的索引,如下所示:像这样执行SELECT查询SELECTlatitude,longitudeFROM3dagWHEREtimestampBETWEEN"+startTime+"AND"+endTime+"ANDHourOfDay=4ANDDayOfWeek=3"的运行时间非常高,达到256356毫秒,或略高于四分钟。我对同一查询的解释给出了我这个:我检索数据的代码如下:Connectioncon=null;PreparedStatementpst=n

python - 如何在获得中间结果的同时在 sqlalchemy 的大表上应用 LIMIT/OFFSET [请阅读下面的详细信息]?

我想对包含大量记录的表执行3个操作:(1)filter(基于搜索查询)(2)order_by(在asc/desc中的单个列)和(3)slice(对于给定的offset和limit值)。在执行这些操作时,我需要中间结果(在筛选/排序后获得),找出满足给定筛选查询的记录数(将此信息发送到前端)。现在我正在使用sqlalchemy的FILTER和ORDER_BY来获取中间结果,然后在列表上应用切片。我如何使用sqlalchemy的FILTER、ORDER_BY和SLICE以及获取过滤/排序后的记录数作为子项来实现相同的目的结果?我现在使用的sqlalchemy查询如下:result=sess

mysql - 每天在大表上添加和删除索引是一个好习惯吗?

我正在构建一个连接到MySQL数据库的Web应用程序。目前我有两个巨大的表,每个表包含大约4000万行,并且它们每天都在接收新行(每天增加~500000-1000000行)。添加新行的过程在夜间运行,此时没有人可以使用该应用程序,新行的内容取决于对当前数据库的一些基本SELECT查询的结果。为了足够快地获得那些SELECT语句的结果,我在WHERE中至少出现一次的每一列上使用简单的索引(每个索引一列)条款。事情是,白天,一些完全不同的查询针对这些表运行,包括一些“范围WHERE子句”(SELECT*FROMt1WHEREa=a1ANDb=b1AND(dateBETWEENd1ANDd2

使用 PHP 分页时 MySQL 大表性能问题

有一个包含大约300,000条记录的巨大mysql表,并希望以这种方式使用查询在PHP中分页记录(虽然不是这里的重点):SELECT*FROM`table`LIMIT250000,100记录的后半部分可能会很慢,尤其是在接近表末尾时(LIMIT开始非常大)。我的猜测是MySQL必须一直倒数到250000才能将结果提供给我?那么如何解决这个或任何其他可能更快的分页方法?谢谢! 最佳答案 确保您使用的是索引,否则它会进行全表扫描。您可以查看执行计划来验证这一点,或者通过使用ORDERBY子句(在索引列上)来强制执行此问题。这是morei

mysql - 在大表的每一行插入不同的 UUID

我有一个包含约8万行导入数据的表。表结构如下:order_line_items-id-order_id-product_id-quantity-price-uuid导入时,导入了order_id、product_id、数量和价格,但uuid字段为空。有没有办法,利用mysql的UUID()函数,给表的每一行批量添加一个uuid?我可以使用脚本循环遍历每一行并更新它,但如果有MySQL解决方案,那将是最快的。 最佳答案 每次调用uuid()都会返回一个不同的唯一值。很简单UPDATEorder_line_itemsSETuuid=uu

mysql - 从大表中查找相似值的最佳方法

我有一个数据库,我在mysql中存储了超过1000000个名称。现在我的应用程序的任务有点典型。我不仅在数据库中搜索名字,还会找到相似的名字。假设名称输入为christian,那么应用程序将显示建议的名称,如christine、chris等。执行此操作的最佳方法是什么,而不使用like子句。建议将仅针对名称最后部分的更改。 最佳答案 如果您还想要相似的名字(通过声音),像SOUNDEX()这样的东西可能会有所帮助:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html

java - MySQL循环遍历每一行(大表)

我有一个包含ID和name的表。我想遍历这张表的每一行。ID是一个主键和auto_increment。我不能使用(?)单个查询来获取所有行,因为表很大。我正在对每一个结果做一些事情。我希望可以停止此任务并稍后继续。我以为我可以做这样的事情:for(inti=0;i但这不起作用,因为auto_increment跳过了一些数字。如前所述,我需要一个选项来停止此任务,以便让我从离开的地方重新开始。与上面的示例代码一样,我知道当前条目的ID,如果我想再次启动它,我只需设置inti=X。 最佳答案 使用单个查询获取所有记录:query="SE

mysql - 如何优化具有多个外连接到大表、group by 和 order by 子句的查询的执行计划?

我有以下数据库(简化):CREATETABLE`tracking`(`id`int(11)NOTNULLAUTO_INCREMENT,`manufacture`varchar(100)NOTNULL,`date_last_activity`datetimeNOTNULL,`date_created`datetimeNOTNULL,`date_updated`datetimeNOTNULL,PRIMARYKEY(`id`),KEY`manufacture`(`manufacture`),KEY`manufacture_date_last_activity`(`manufacture`,`

sql - 优化大表 MySQL 上的 ORDER BY 查询

我有一个正在尝试优化的浏览类别查询。我最终使用临时的;在解释中使用文件排序,并且查询在具有60,000行的类别上很慢。如果我删除OrderBy子句,查询运行速度非常快,仅需0.05秒即可完成60,000行。对于OrderBy子句,它非常慢,大约5秒。Parts和Parts_Category一样包含大约500,000行。我有一个关于部件(状态、级别、仓库、更新)的组索引,称为sort_index在解释的顶部我有|所有|使用临时的;使用文件排序所有其他指标都显示正常。有人可以告诉我可能是什么问题吗?我没主意了。也许我应该重新安排此查询,以便获得更好的性能?查询。SELECTParts.*,