我需要在MySQL中保持一个任务队列。当从DB读取它们时,我必须确保顺序与持久化的顺序完全相同。一般来说,我更喜欢与DB无关的解决方案(即纯JPA),但是添加一些Hibernate和/或MySQL的味道也是可以接受的。
我的(可能是天真的)第一个版本看起来如下:
em.createNamedQuery("MyQuery", MyTask.class).setFirstResult(0).setMaxResults(count).getResultList();
其中,MyQuery没有任何"order“子句,即它看起来如下:
SELECT t FROM MyTasks
我有一个表,其中一列被排序。MySQL会以某种方式检查它是否已排序吗?如果我在对col1进行排序的地方进行这样的查询SELECT from tab WHERE col1>890 AND col1<74893798,它是否与SELECT from tab WHERE id>16 AND id<798176相同?我无法正确测试这一点,因为缺乏刷新查询缓存的管理员权限。为了清楚起见,我们对col1进行了排序,因为它是从另一个按列排序的表中插入的。
我有一个包含两个整数列的主键的表。我在这张桌子上存了2亿行。我的程序需要获得由主键的列按相同顺序排序的完整表。
所以,我的查询看起来像Select * from MYTABLE order by PK1,PK2;
我注意到,查询没有立即发送数据,而是在“排序结果”状态下花费了大量时间。我认为mysql将使用主键索引以所需的顺序直接访问数据。但是,它似乎没有顺序地扫描它,然后对数据进行排序。
是否有可能改变行为并提高查询的效率?
备注:我尝试过使用MySQL5.5和mariadb10.2。
以下是一些有用的信息(我试图用索引列和非索引列解释一些订单,并给出相同的结果)。
mysql> sh
我有一个包含以下字段的MySQL表:
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(255) NOT NULL UNIQUE,
ReleaseDate DATETIME(6) NOT NULL DEFAULT "1970-01-01"
此表的默认排序是由Id进行的,因为它是主键。当我删除Id列并将Name作为主键时,表是按字母顺序排列的,这就是我想要的。
以Id作为主键,而Name是一个UNIQUE索引,表继续按增加Id的顺序排列。我知道在显示表时可以使用ORDER BY Name,但是是否有一种方法可以将表本
首先,我做了一个简单的留言簿,现在我希望最后的评论显示在网站的第一个位置。我的计划是按日期或ID按降序对数据库中的行进行排序。以下是代码片段:
mysql_query("SELECT * FROM `guestbook` ORDER BY `Date` DESC") or die("Mysql error: " . mysql_error());
这段代码不会导致任何错误,但注释是第一次显示。我也从phpMyAdmin复制了代码,但结果是相同的。使用auto_increment时,ID的类型当然是INT,而Date的类型是VARCHAR (我已经将日期和时间存储
我不是MySQL的专家,在没有找到解决方案的情况下,我搜索了很多关于以下问题的内容。
因此,我使用了一个具有以下结构的MySQL表:
CREATE TABLE photos (
file varchar(30) NOT NULL default "",
place tinytext NOT NULL default "",
description tinytext NOT NULL default "",
type char(1) NOT NULL default "",
taken year NOT NULL
我一直在想办法重新订购菜单,所以它是按字母顺序排列的。这个菜单有大约500个条目,并且严格用于网址结构,但是我们有另一个显示菜单,它将使用MenuLinks,我们必须从后端的下拉菜单中选择所有这些,这是非常困难的。我一直在尝试创建一个mysql查询来完成它,但是没有效果。
沿着…的路线
UPDATE jos_menu set ordering = ordering+1 WHERE menutype = 'menu-name' ORDER BY name ASC
但当然不管用了。只是好奇有没有人知道这件事。
也许,如果我操纵管理员显示下拉菜单(编辑菜单项时)按字母顺序显示,这对0
以下查询的唯一不同之处是按列排序。这两个查询的结果集是相同的。但是,第二个查询执行计划显示“使用临时;使用文件”来排序,而对于第一个查询,它不需要文件短。
除了id之外,我还有c.table_b_id和c.some_indexed_id的索引
SELECT * FROM TableA a
inner join TableB b on a.id = b.id
inner join TableC c on c.table_b_id = b.id
where c.some_indexed_id = 1
order by c.table_b_id asc;
SELECT * FROM Tab
我经常使用下面的查询:
SELECT * FROM table WHERE Timestamp > [SomeTime] AND Timestamp < [SomeOtherTime] and publish = 1 and type = 2 order by Timestamp
我想优化这个查询,我正在考虑把timestamp作为聚集索引的主键的一部分,我认为如果timestamp是主键的一部分,那么插入到表中的数据将按timestamp field.Also顺序写入磁盘。我认为这会大大改善我的查询,但不确定这是否会有帮助。
table has 3-4 million+ rows
对于WordPress,我使用相同的源代码和相同的数据库,只是mysql版本不同。这使我的页码帖有重复之处。这是我发现的。知道怎么用更高的版本来解决吗?
这是针对第2页和第3页查询输出的。左边是MySql 5.5,右边是MySql 5.6.up_posts.ID是独一无二的。
SQL语句:-
SELECT SQL_CALC_FOUND_ROWS up_posts.ID FROM up_posts WHERE 1=1 AND up_posts.post_type = 'post' AND (up_posts.post_status = 'publish' OR
我有一个mysql数据库,它有一个表“困难”,里面有几条记录。如果我执行"select * from added“,我会按照添加它们的顺序返回它们,按主键id排序:
mysql> select * from difficulties;
+----+-------+-----------+--------+----------+-----------+
| id | value | name | letter | low_band | high_band |
+----+-------+-----------+--------+----------+-----------
我真的在寻求帮助,而不太帮助我;我不做MySQL。
基本上,我要做的是从下到上读取数据库表。与它目前自上而下阅读的事实不同,我希望它能自下而上。是否有一个PHP函数或代码可以从底层开始读取?
下面是读取数据库的代码:
<?php
//Here is the connecting to database stuff; works fine and not going to share it
$result = mysqli_query($con,"SELECT * FROM posts");
//This has PHP select and read the tabl
使用两个表(A & B),它们的PK可连接,A的主键被排序为DESC ( MySQL 8允许按降序排列PK),A具有2个索引的ASC排序。
当我执行如下查询时
SELECT * FROM `A` a
LEFT JOIN `B` b ON a.id <=> b.id
WHERE a.idx1 = 'X' AND a.idx2 = 'Y';
它什么也回不了..。但是,如果我加上一个精确的条件,比如:
SELECT * FROM `A` a
LEFT JOIN `B` b ON a.id <=> b.id
WHERE a.idx1 =
我使用下面的代码创建了一个表,但是显示了警告
No index defined!
我使用以下SQL命令创建表
CREATE TABLE IF NOT EXISTS `test` (
`path` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
我使用以下PHP代码将多个图像路径插入数据库,但每个路径都存储在新行中,如何存储在SQL表中的单行中?
if ($_FILES) {
$upload = new Upload_Rename();
$destination = 'upload';
$paths=$u
1 MySQL
2 PHP and MySQL
3 PHP MySQL Database Search
这是我的表中的三行。在应用搜索关键字'php mysql数据库‘,它应该显示结果的顺序为3-2-1从第3行开始,因为有所有3个关键字在它。
我尝试了这段代码,但它只显示了所有三个结果,但没有按我想要的顺序显示。
SELECT data,
MATCH(data) AGAINST('PHP MySQL Database' IN BOOLEAN MODE) AS score
FROM table
WHERE MATCH(data) AGAINST('PHP MySQ
我使用的是SQL Server 2016 Express。此查询按预期返回数据:
SELECT TOP (1000)
[ResourceID],
[OrganizationID],
[CategoryID],
[SubCategoryID]
FROM
[dbo].[Resources]
对于OrganizationID,我得到1,2,3,4,5,6等。
另一方面,这个查询:
SELECT TOP (1000)
[ResourceID],
[OrganizationID]
FROM
[dbo].[Resources]
返回O
在cassandra中创建表时,我们可以给出按如下顺序排列的聚类键。
Create table user(partitionkey int, id int, name varchar, age int, address text,
insrt_ts timestamp,
Primary key(partitionkey, name, insrt_ts, id)
with clustering order by (name asc, insrt_ts desc, id asc);
当我们将数据插入到该表中时,如cassandra文档所示,记录将根据聚类键进行排序。
当我使用CQL1和
在MySQL中,这两个查询之间有区别吗?
SELECT * FROM .... ORDER BY Created,Id DESC
和
SELECT * FROM .... ORDER BY Created DESC, Id DESC
所需的行为:按"Created“(时间戳)排序(降序),但当两个项目具有相同的"Created”值时,则退回到使用Id排序( desc )。