草庐IT

php - 大表中的 SQL 随机行(带 where 子句)

我有一个网站,人们可以在上面对汽车进行投票。向用户展示了4辆汽车,他/她可以投票选出他们最喜欢的汽车。cars表包含重要的列:car_idint(10)(notauto_increment,sohasgaps)viewsint(7)pointsint(7)car_typeint(1)(value=1,2or3)目前我为所有car_types使用一个映射表,它有一个没有间隙的PK。我选择映射表的最大ID并创建4个随机数(PHP),从映射中选择这些行并获取相应的car_id。我用这些数字从cars表中选择汽车。问题是较晚添加到数据库的汽车与较早添加的汽车获得相同分数的机会较少。我的问题是如

mysql - MySQL INSERT 语句在大表中是否更慢?

我可以看到SELECT和UPDATE语句如何随着表的增长而变慢,但是INSERT呢? 最佳答案 INSERT也会变得更慢,特别是如果您有很多索引也必须更新。虽然不同的存储引擎之间存在差异:MyISAM对于很多SELECT来说更快,InnoDB对于很多INSERT来说更快/UPDATE因为它使用行锁定而不是表锁定以及它处理索引的方式。 关于mysql-MySQLINSERT语句在大表中是否更慢?,我们在StackOverflow上找到一个类似的问题: https

MySQL:将大表拆分成小表的最快方法

我有一个很大的表,里面有将近3亿条记录。由于select查询对我来说太慢了,我想将它拆分成大约800个小表。数据集如下所示:XXXXXXcolumn2column3column4...XXXXXXcolumn2column3column4...XXXXXXcolumn2column3column4...YYYYYYcolumn2column3column4...YYYYYYcolumn2column3column4...我想根据第一列的值拆分表(例如,将带有XXXXXX的记录拆分为表XXXXXX),最快的方法是什么?注意:我已经为它添加了10个分区,但它并没有很好地加速它。

MySQL 大表 JOIN 使数据库崩溃

根据我最近的问题Selectinformationfromlastitemandjointothetotalamount,我在生成表时遇到了一些内存问题我有两个表sales1和sales2,如下所示:id|dates|customer|sale使用这个表定义:CREATETABLEsales(idintauto_incrementprimarykey,datesdate,customerint,saleint);sales1和sales2定义相同,但是sales2在每个字段中都有sale=-1。一个客户可以不在一个表中,也可以在一个表中,也可以在两个表中。两个表都有大约300.000条

mysql - 大表复合索引,优化聚合查询

我们在MySql5.5中有一个大表(有大约1.6亿条记录)。我们安装mysql的机器有4GBRAM表架构+---------------+---------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+---------------+---------------+------+-----+---------+-------+|domain|varchar(50)|YES|MUL|NULL|||uid|varchar(100)|YES||NULL|||sid|varchar(100)|

mysql - 优化两个大表上的简单查询

我正在尝试提供一项功能,让我可以显示friend查看最多的页面。我的friend表有570万行,View表有530万行。目前我只想对这两个表运行查询并找到一个人的friend查看次数最多的20个页面ID。这是我现在的查询:SELECTpage_idFROM`views`INNERJOIN`friendships`ONfriendships.receiver_id=views.user_idWHERE(`friendships`.`creator_id`=143416)GROUPBYpage_idORDERBYcount(views.user_id)descLIMIT20这是解释的样子:

php - 从大表中获取随机结果

我正在尝试从包含大约700万条记录的表中获取4个随机结果。此外,我还想从同一个表中获取4个按类别筛选的随机记录。现在,正如您想象的那样,在这么大的表上进行随机排序会导致查询花费几秒钟,这并不理想。我为未过滤结果集想到的另一种方法是让PHP选择1-7,000,000左右的一些随机数,然后执行IN(...)查询只抓取那些行-是的,我知道这个方法有一个警告,如果具有该ID的记录不再存在,你可能会得到少于4。但是,上面的方法显然不适用于类别过滤,因为PHP不知道哪些记录号属于哪个类别,因此无法选择要选择的记录号。有没有更好的方法可以做到这一点?我能想到的唯一方法是将每个类别的记录ID存储在另一

MySQL优化——大表连接

从这里开始是所涉及表格的简化版本。tbl_map有大约4,000,000行,tbl_1有大约120行,tbl_2有大约5,000,000行。我知道数据不应该考虑那么大,因为谷歌、雅虎等使用更大的数据集。所以我只是假设我遗漏了一些东西。CREATETABLE`tbl_map`(`id`bigint(20)NOTNULLAUTO_INCREMENT,`tbl_1_id`bigint(20)DEFAULT'-1',`tbl_2_id`bigint(20)DEFAULT'-1',`rating`decimal(3,3)DEFAULTNULL,PRIMARYKEY(`id`),KEY`tbl_1

大表连接的mysql查询优化

我正在为广播电台创建一个报告,该报告生成在线听众的日志,以记录ip、日期、时间、总用户收听等。听众表client_ipdatetimedate_timelisteners---------------------------------------------------------------166.147.81.1792012-04-3000:19:462012-04-3000:19:46164.12.243.2032012-04-3004:38:372012-04-3004:38:371198.228.211.1952012-04-3005:36:332012-04-3005:3

mysql - 从单个查询更新大表时,SQL NOW() 函数是动态的还是静态的?

如果我写了一个SQL语句来更新一个非常大的MySQL数据库表上的日期字段,那么SQLNOW()函数的输出是动态的,因为它在运行时随时间变化,或者它对每个数据保持不变字段并使用其开始时间?IE;将:UPDATE`table`SET`date`=NOW()总是在所有字段中产生相同的结果(例如2016-10-1715:33:10),无论处理时间是如果是动态的。我需要一点帮助来创建一个不存在的声明。 最佳答案 它确实对每个数据字段保持不变并使用执行开始时间。前往检查一下。http://www.mysqltutorial.org/tryit/