我有以下疑问:
SELECT SUM(s.count) as count, a.name, s.author_id as id
FROM twitter_author_daily_stats s
JOIN twitter_author a ON s.author_id = a.id
WHERE s.`date` >= '2011-01-07'
AND s.`date` <= '2011-09-21'
AND s.profile_twitter_search_id IN (263)
GROUP BY s.a
我有一个复杂的查询,我必须在一个给我带来一些性能问题的应用程序中运行。我把它简化了。数据库是MySQL 5.6.35在CentOS上。
SELECT a.`po_num`,
Count(*) AS item_count,
Sum(b.`quantity`) AS total_quantity,
Group_concat(`web_sku` SEPARATOR ' ') AS web_skus
FROM `order` a
INNER JOIN `order_item` b
我有一个名为temp的简单表,它有三列和以下数据:
# c1 c2 v
1 1 'a'
1 2 'b'
1 1 'b'
1 2 'a'
我运行这个查询:
SELECT
t01.c1,
t01.c2,
COUNT(DISTINCT v) AS cnt
FROM
(
SELECT
FLOOR(c1) AS c1,
FLOOR(c2) AS c2,
v
FROM
temp
) AS
我使用w3s作为我在中的例子
SELECT Shippers.ShipperName,COUNT(Orders.OrderID) AS NumberOfOrders,
Orders.OrderDate
FROM Orders
LEFT JOIN Shippers
ON Orders.ShipperID=Shippers.ShipperID
GROUP BY ShipperName;
我很困惑,为什么上面的声明没有抛出一个错误。当我们通过所有的MySQL聚合时,MySQL如何知道要使用哪个OrderID
如果您查看MySql临时表的正式文档:
提出的理由如下:
The server creates temporary tables under conditions such as these:
Evaluation of UNION statements.
Evaluation of some views, such those that use the TEMPTABLE algorithm,
UNION, or aggregation.
Evaluation of statements that contain an ORDER
我需要优化一个执行order by的MYSQL查询。无论我做什么,mysql最终都会执行文件排序,而不是使用索引。
这是我的桌子ddl。(是的,在本例中,DAYSTAMP和TIMESTAMP列完全相同)。
CREATE TABLE DB_PROBE.TBL_PROBE_DAILY (
DAYSTAMP date NOT NULL,
TIMESTAMP date NOT NULL,
SOURCE_ADDR varchar(64) NOT NULL,
SOURCE_PORT int(10) NOT NULL,
DEST_ADDR varchar(64) NOT NUL
当我使用mysql时,我得到了这个错误,请任何人给我解释一下。下面的A,B,C之间有什么不同?
A) select * from table where a=a group by(b) // this execute & work fine
B) select * from table where a=a group by b,c // this execute * work fine
c) select * from table where a=a group by (b,c) // this is giving an error - error is operand should
我正在编写一个针对当前正在开发的小表的查询。在生产中,我们希望它在表的整个生命周期中变得非常大(主键是一个数字(10))。
我的查询选择我的表的前N行,按特定条件进行筛选,并按日期升序排序。从本质上讲,我们将记录批量分配给特定用户进行处理。在我的例子中,N将只是10、20或30。
我目前在一个subselect中选择我的主键,使用rownum来限制我的结果,如下所示:
SELECT log_number FROM (
SELECT
il2.log_number,
il2.final_date
FROM log il2
INNER JOIN agent A ON A.
下面是我正在使用的SQL语句。
$sql = "SELECT surname, forename, count(*) FROM people WHERE user_id='$user_id'
GROUP BY surname ORDER BY time";
$result = mysql_query($sql);
$count=mysql_num_rows($result);
if($count > 0){
while($row = mysql_fetch_array($result)) {
$i = $i +1;
$person[$i
MySQL Server version: 5.0.95
Tables All: InnoDB
我对MySQL db查询有问题。基本上,我发现如果我索引一个特定的varchar(50)字段tag.name,那么我的查询所用的时间要比没有索引该字段花费的时间更长(x10)。我试图加快这个查询的速度,但是我的努力似乎适得其反。
罪魁祸首似乎是:
WHERE `t`.`name` IN ('news','home')
我注意到,如果我使用相同的条件直接查询没有联接的tag表,并将名称字段编入索引,那么我就没有问题了。它实际上运行得比预期的更快。
示例查询**
有没有一种方法可以根据值在mysql列中出现的频率对数据进行排序,并使它们成为DISTINCT。因此,如果表中有一个颜色列,如下所示:
colors
------ ----
red |
blue |
red |
green |
blue |
red |
yellow|
blue |
green |
red |
结果将是:
red
blue
green
yellow
红色出现4次,蓝色3次,绿色2次,黄色1次。谢谢
我有一个包含两个整数列的主键的表。我在这张桌子上存了2亿行。我的程序需要获得由主键的列按相同顺序排序的完整表。
所以,我的查询看起来像Select * from MYTABLE order by PK1,PK2;
我注意到,查询没有立即发送数据,而是在“排序结果”状态下花费了大量时间。我认为mysql将使用主键索引以所需的顺序直接访问数据。但是,它似乎没有顺序地扫描它,然后对数据进行排序。
是否有可能改变行为并提高查询的效率?
备注:我尝试过使用MySQL5.5和mariadb10.2。
以下是一些有用的信息(我试图用索引列和非索引列解释一些订单,并给出相同的结果)。
mysql> sh
通过阅读MySQL文档,我无法解释phpMyAdmin中这两个查询之间的区别:
SELECT * FROM f_ean GROUP BY ean HAVING type = 'media'
-->给我57059个结果
SELECT ean, type FROM f_ean GROUP BY ean HAVING type = 'media'
-->给我73201个结果
只显示不同的列,查询的结果号怎么会不同呢?
我在MySQL 5.7.30中有一个非常简单的表,我将其归纳为下面的三列。我试图为某些组(WHERE groupable IN (3, 4, 5))确定每个组的最高N个元素。但是,即使对于单个组,我也无法有效地完成这个任务(请参阅下面的WHERE groupable = 3 )。
DROP TABLE IF EXISTS test;
CREATE TABLE test (
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
groupable BIGINT NOT NULL,
orderable BIGINT NOT NULL,
我有一个mysql_query。我在想要索引哪一个。
SELECT count(*) FROM foo WHERE c=5 GROUP BY d
也许(c,d)或者仅仅是c?
我还有一个类似的。
SELECT count(*) FROM foo WHERE d=6 GROUP BY b
可能是(d,b)还是只是d?
这里的另一个:
SELECT a FROM foo WHERE b=5 GROUP BY c
这里(a,b,c)?
我的观点是使索引涵盖三个查询。最好的办法是?哪一列?
我使用mysql Ver 14.14 Distrib 5.5.44, for debian-linux-gnu (x86_64) using readline 6.3
我有由order列排序的行。
结果,很多时候,订单数是相同的,比如说1。但是结果是以固定的顺序返回的。
SELECT * from mytable ORDER BY fooOrder;
如果fooOrder总是1,会返回排序的结果吗?
很明显有个命令,但我不知道是哪一个。
从MySQL表中选择列时,与列在表中的顺序相比,选择列的顺序是否会影响性能(不考虑可能覆盖列的索引)?
例如,您有一个包含行uid、name、bday的表,并且具有以下查询。
SELECT uid, name, bday FROM table
MySQL是否会以不同的方式看待以下查询,从而导致任何类型的性能影响?
SELECT uid, bday, name FROM table
我正在使用MySQL,并且我有一个在列中包含日期的表(我正在为一个类制作一个包含到期日期的表)。在此之前,我的查询如下:
SELECT * FROM duedates_f2011 ORDER BY anothercolumn
为了防止重复出现(基于duedate列),我必须将其更改为:
SELECT * FROM duedates_f2011 GROUP BY duedate
目前,它保留了相同的顺序,但是我如何保证它仍然会这样做呢?在我读过的GROUP BY教程中,没有任何东西表明它仍然会对其进行排序,而且在之后添加ORDER BY语句也是不正确的。我是否遗漏了什么,或者我应该添加其他什么以
我想知道斯芬克斯的实时索引和它的配置。我有一个包含以下列的mysql表:
filter_id int(11) AI PK
filter_user_id int(11)
filter_name varchar(64)
filter_state text
我把json存储在filter_state中。现在,我想搜索json字段,并配置Sphinx实时索引。
我的配置文件如下所示:
index rt_filters
{
type = rt
path = /var/sphinx/data/rt_filters
rt_field = state
我通过MySQL PDO获取数据数组:
"select * from table"
在查询中使用函数排序是否更快,例如
"select * from table order by key"
与直接的mysql顺序查询相比,使用PHP usort或任何其他数组排序会牺牲很大的效率吗?
$prepare=$database->prepare("select * from table");
$prepare->execute();
$fetch=$prepare->fetchall(PDO::FETCH_ASSOC);
usort(
"group“子句是否自动保证结果将按该键排序?换句话说,它是否足以写:
select *
from table
group by a, b, c
还是一个人必须写
select *
from table
group by a, b, c
order by a, b, c
我知道,例如,在MySQL中,我不必这样做,但我想知道是否可以通过SQL实现来依赖它。有保证吗?
我正在尝试优化查询。使用EXPLAIN告诉我它是Using temporary。考虑到表的大小(20m+记录),这是非常低效的。查看MySQL文档,我没有发现在查询中需要临时表的任何东西。我还尝试将ORDER设置为与组BY相同,但仍然说使用临时和查询要花费很长时间才能运行。我使用的是MySQL 5.7。
是否有一种方法可以避免对此查询使用临时表:
SELECT url,count(*) as sum
FROM `digital_pageviews` as `dp`
WHERE `publisher_uuid` = '8b83120e-3e19-4c34-8556-7b710bd7b
我们的MySQL(Percona Server)数据库有一个包含1000万行的大表,有很多比40秒更长的慢查询:
SELECT col1, Seller, col3, col4, Id, col5
FROM table1
WHERE Seller = 346761
AND col1 IN (2, 3, 4)
AND col3 = 1
AND col4 NOT IN (5,6,7)
ORDER BY Id DESC
LIMIT 0, 20;
我在Seller、col1、col3、col4上创建了索引。这些索引是单独的,而不