我有以下查询:
SELECT *
FROM s
JOIN b ON s.borrowerId = b.id
JOIN (
SELECT MIN(id) AS id
FROM tbl
WHERE dealId IS NULL
GROUP BY borrowerId, created
) s2 ON s.id = s2.id
是否有一种简单的方法对此进行优化,以便我可以直接进行连接并利用索引?
更新
created字段是GROUP BY语句的一部分,因为由于我们的MySQL版本和正在使用的ORM的限制,有可能拥有具有相同created时间戳值的多个记录。因此,我需要
我希望在类似于下面的PostgreSQL的MySQL中创建查询:
CREATE FUNCTION check_unique_pair(IN id1 INTEGER, IN id2 INTEGER) RETURNS INTEGER AS $body$
DECLARE retval INTEGER DEFAULT 0;
BEGIN
SELECT COUNT(*) INTO retval FROM (
SELECT * FROM edges WHERE a = id1 AND b = id2
UNION ALL
SELECT * FROM edges WHERE a = id2
我是objective C的新手,我需要在php中执行如下查询:
$alreadyDone = array();
do {
$query = "SELECT * FROM myTable WHERE id NOT IN (".implode(",", $alreadyDone).")";
$res = mysql_query($query);
$n = mysql_num_rows($res);
while ($r = mysql_fetch_assoc($res)) {
// do some st
我有以下MYSQL查询:
START TRANSACTION;
SELECT sport_id INTO @a FROM sports WHERE sport_id = 2 FOR UPDATE;
UPDATE sports SET sport_name = 'Table Tennis' WHERE sport_id = @a;
if (@a > 1) then
COMMIT;
ELSE
ROLLBACK;
END IF;
问题是它在if语句处返回一个错误:
#1064 -您的SQL语法出现了错误;请检查与您的MySQL服务器版本对应的手册,以获得
有时我会遇到一种奇怪的MySQL行为。让我们假设我有索引(type,rel,created),(type),(rel)。对于这样的查询,最佳选择是:
SELECT id FROM tbl
WHERE rel = 3 AND type = 3
ORDER BY created;
就是使用索引(type, rel, created)。但是MySQL决定将索引(type)和(rel)相交,这会导致较差的性能。下面是一个示例:
mysql> EXPLAIN
-> SELECT id FROM tbl
-> WHERE rel = 3 AND type = 3
在MYSQL中,一些我不想更改的Wordpress插件中的代码正在运行以下查询:
SELECT * WHERE cond1 AND (field1 = val1 OR field2 = val2)
但是,尽管在val1和val2上有索引,但它运行得非常慢。(慢速查询日志确认它扫描所有行。)我是否可以提示MYSQL,它应该始终将公式扩展到以下等效但更快的形式?
SELECT * WHERE cond1 AND (field1 = val1)
UNION
SELECT * WHERE cond1 AND (field2 = val2)
这将大大减少扫描的行数,因此它将产生更好的性能。我也想知道
S
我有以下MySQL查询:
DELIMITER //
CREATE PROCEDURE InsertResult (IN winnerID INT, IN loserID INT)
BEGIN
INSERT INTO KomperResult (WinnerID, LoserID) VALUES (@winnerID, @loserID);
DECLARE winnerScore, loserScore INT;
SELECT Score INTO @winnerScore FROM KomperPerson WHERE ID = @winnerID;
SELEC
我有一个包含i(主)、s和g列的mysql表。我有两个问题:
INSERT INTO usertable (i, s, g) VALUES('1', '2', '5') ON DUPLICATE KEY SET s=(s*g+'2')/(g+'5'), g=g+'5';
和
SELECT s FROM usertable WHERE i='1' LIMIT 1
是否可以在1查询中同时使用这两个查询?基本上是想减少DB查询的数量。
谢谢
我有一些表有30多万条记录,表结构如下:
id | title | source | description | date | fullindex
id是主键,date增加了索引,source增加了索引,fullindex增加了全文索引。
现在我想做一个查询。最新的5个每组全文搜索。
我试过了
SELECT 'a' as t_name,id,title,source,description,date,fullindex
FROM table1 a1
WHERE MATCH (fullindex) AGAINST ('+bool' IN BOOLEAN MO
假设我有类似(在MySQL上)的查询,
select xxx from table x
where col_a=yyy and col_b=zzz
假设我有一个col_a和col_b的组合索引。我的问题是,这个组合索引比在col_a或col_b上使用单一索引更有帮助吗?组合索引会像我发布的那样提高查询性能吗?不知道为什么?谢谢。
你好,林
我有一个叫做'users‘的mysql标签。有两个明显的字段:'user‘和'pass’。
我的身份验证查询如下:
"SELECT pass FROM users WHERE user = ? AND pass = ?"
我认为索引可以加快查询速度。我应该只索引'user‘字段还是还要索引'pass’字段?
也是比较密码与sql查询比与PHP字符串比较更快。
我有一个客户端运行一个php图片库(在php 5.5上,mysql 5.5上,使用myisam表),它使用目录树方法。不幸的是,他们库应用程序中的一些查询需要非常长的文件端口。令人反感的查询:
SELECT `name`, `slug`
FROM `db_table`
WHERE `left_ptr` <= '914731'
AND `right_ptr` >= '914734'
AND `id` <> 1
ORDER BY `left_ptr` ASC
id、left_ptr和right_ptr上都有索引,但根据解释,
我一直在开发一个mysql数据库,其中一个最重要的具有database的表将在9亿到1000亿条记录之间。我可以执行以下查询:
select MAX(SEN_ID) as SEN_ID from senal group by variable_VAR_ID
但是大概需要12分钟。如何优化此查询?
这个查询在数据库小的时候工作得很好,但是现在数据库中有数百万行,我意识到我应该更早地优化它。
在EXPLAIN中执行查询显示如下:
id select_type table type possible_keys key key_len ref rows Ext
我有两个数据库表:“地点”和“翻译”。对地名的翻译是通过从" places“中选择记录来完成的,这些记录尚未翻译到指定的语言:
SELECT `id`, `name`
FROM `places`
WHERE `id` NOT IN (SELECT `place_id` FROM `translations` WHERE `lang` = 'en')
这在7000个地方的记录中很好,但当翻译数量达到5000份时,它就崩溃了。从那时起,查询大约需要10秒,并返回错误:
2006 - MySQL服务器已经消失
据我所知,这里的主要问题是返回到许多结果的子查询,但是如果我需
表中大约有100000条记录(元组)。没有where子句,它只需要几毫秒,而当使用where子句时需要4-5秒。
SELECT COUNT(DISTINCT id) FROM tablename WHERE shippable = '1'
我也试过这个,但它比前一个花了更多的时间。
SELECT count(rowsss) FROM (SELECT count(*) as rowsss FROM tablename WHERE shippable = '1' GROUP BY id) as T
这是在启动mysql查询之前使用EXPLAIN关键字时的输出
当我尝试一次执行两个SELECT语句,如下所示,日志控制台返回运行时错误:
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * FROM ...
生成语句的Java源代码:
@Repository
public class VehicleObjectDbAccess {
@Per
为了只获得带有最新时间戳的数据,我从这个答案中使用mysql查询:
我的查询如下:
SELECT stock_id,timestamp,price FROM market m1
WHERE timestamp =
(SELECT MAX(timestamp) FROM market m2 WHERE m1.stock_id = m2.stock_id)
但执行起来需要10分钟。
优化它的不同选择是什么?(mysql)
市场有以下模式:(sqlalchemy)
class Market(d
我有运行MYSQL查询的PHP系统,如下所示
select
order.id,
order.name,
order.date,
customer.name,
items.coupon_code,
from order
left join customer on order.custid = customer.id
left join items on items.coupon_code = order.coupon_code
where items.coupon_new_code is null
and order.status = 1000
AND order.promo_code in (
我使用嵌套集在MySql中表示树。
树有几种不同的“类型”,每个用户都可以拥有一棵不同类型的树。
这张桌子看起来是这样的:
CREATE TABLE folders (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
typeId TINYINT(1) UNSIGNED NOT NULL,
userId INT UNSIGNED NOT NULL,
lft INT NOT NULL,
rgt INT NOT NULL,
title VARCHAR(50) DEFAULT NULL,
PRIMARY KEY
我有一个数据库表(可能很大,将来有数亿条记录),我将经常在该表上执行以下查询:
select *
from table1
where col1 = [some number]
order by col2
显然,在"col1“上建立索引会使它运行得很快。col1并不是唯一的,因此会返回许多行(我希望是2000+)。
在(col1,col2)上创建索引有意义吗?MySQL会在这个查询中使用它吗?
另外,如果我只查询没有"order“部分,这个索引也会用于"where”部分吗?
我有2亿张记录的表Foo和1000张记录的表格栏,它们是多对一连接的。列Foo.someTime和Bar.someField有索引。此外,在Bar 900记录中,someField为1,100有someField为2。
(1)该查询立即执行:
mysql> select * from Foo f inner join Bar b on f.table_id = b.table_id where f.someTime between '2008-08-14' and '2018-08-14' and b.someField = 1 limit 20;
我有一个网站,它开始出现性能问题,因为mysql查询是针对每个请求执行的。
我有下表结构。
Post表(125000+记录) id:主键、thread_id索引和类型列
📷
线程表(48000+记录) id :主键
📷
我正在运行以下查询
select t.id, t.subject, count(distinct p.id) as postCount
from thread t
inner join post p on p.thread_id = t.id
where p.posted_on &g
目前,我有一个MYSQL查询正在执行中。我需要在查询中的两个字段上创建索引:cancel和complete。执行此操作的最佳方法是什么? SELECT* FROM table WHERE cancel != 'CANCEL' AND complete IN ('COMPLETE','TAKEN_BACK')
我有一个包含4个表的MySql数据库(实际上,比这多得多,但只有这4个与问题相关),让我们称它们为A、B、C和D。下面是模式:
CREATE TABLE A
(
pKey INT NOT NULL AUTO_INCREMENT,
name NVARCHAR(50),
PRIMARY KEY(pKey),
UNIQUE INDEX(name)
);
CREATE TABLE C
(
pKey INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(pKey)
);
CREATE TABLE B
(
pKey INT NOT NULL AU
我有两张桌子如下所示
我在两个表上都有如下所示的综合索引:
users表有一个复合索引:(login_type_id,language_id,enabled,level) 地址表有一个复合索引:(user_id,city_id,enabled)
我想执行以下查询
select * from users u
left join address adr
on u.id = adr.user_id
where u.login_type_id = 1
and u.langauge_id = 1
and u.enabled = true
and adr.city_id in (1,2,3,4,
我希望在编译时生成MYSQL查询。有一些和子句我想让它们根据可选的输入参数动态地附加到查询中,这些参数在运行时是已知的。
因此,我计划使用LIKE搜索,而不是动态连接AND。
假设我有一个名为'Ramakrishna‘的值,查询如下
SELECT * from my_table WHERE col LIKE '%Ramakrishna%'
当参数没有值时,我想使用like search
SELECT * from my_table WHERE col LIKE '%%'
我想对我的查询中的15个参数执行此操作。除非我知道这个方法的性能趋势,否则我
假设我有一个查询:
(SELECT pets.id, "pets" AS "table" FROM pets WHERE name="Joey")
UNION ALL
(SELECT toys.id, "toys" AS "table" FROM (SELECT id, "pets" AS "table" FROM pets WHERE name="Joey") AS parentQuery, toys WHERE type="Ball" AND pe
我有下面的2 mysql_queries**:**
查询1(对于imgClass和imgGender,这个查询还会重复两次):
$imgFamily_query = "SELECT DISTINCT imgFamily FROM primary_images WHERE '$clause' ";
查询2:
$query_pag_data = "SELECT imgId, imgURL, imgTitle, view, secondary FROM primary_images WHERE '$clause' ORDER BY imgDa
我正在尝试优化这个MySQL查询。我想得到在当前约会被查看之前没有预约的客户的数量。换句话说,如果他们有约会(这就是NOT IN(子查询正在检查的)),那么就排除他们。
但是,这个查询绝对会扼杀性能。我知道MySQL在not (查询)方面不是很好,但我不确定优化这个查询的最佳方法。它需要从15秒到30秒的时间。我已经在CustNo、AptStatus和AptNum上创建了索引。
SELECT
COUNT(*) AS NumOfCustomersWithPriorAppointment,
FROM
transaction_log AS t
我有一个select查询,ItemType是varchar类型,ItemComments是int类型:
select * from ItemInfo where ItemType="item_type" order by ItemComments desc limit 1
您可以看到这个查询有3个条件
其中'ItemType‘等于一个特定的值;
由“ItemComments”订购
降序
有趣的是,当我选择具有所有三个条件的行时,它会变得非常慢。但是,如果我删除这三个条件中的任何一个(条件2除外),查询就会运行得相当快。请参见:
select * f
我在MySQL中有一些radius数据和一个users表,我想从这些数据中获取信息。目前,我有以下查询,但查询速度非常慢。radacct表有1000万行数据,我正在使用username作为公共链接字段,如下所示:
SELECT
`billing_plans`.`PlanName`,
`ipinfo`.`value` as `ip`,
`userbillinfo`.`username`,
(SELECT max(`radacct`.`acctstarttime`) FROM `radacct` WHERE `radacct`.`username` = `userbillinfo`.`userna
我在我的生产数据库中删除少量记录时遇到了一些问题,该数据库有大量的记录。
我的桌子是:
成员:800万记录
“id”列的索引
“sub_id”列的索引
Member_child: 6200万条记录
“id”列的索引
外键(默认为索引?)关于“member_id”栏
我的应用程序需要删除某个提交(sub_id)值的成员的所有子记录,因此尝试运行查询:
delete from member_child where member_id in (select m1.id from member m1 where m1.sub_id=xxx)
我提交的材料在儿童表中有大约
我正在寻找一些帮助,使我的php/MySQL代码更有效率。目前,我的PHP代码中有一条嵌套的SQL语句,它一直在运行。我知道有一种更有效的方法,在一条语句中执行查询,但我正在努力弄清楚如何做到这一点。
基本上,我有两张桌子。“顾客”和“购买”。我想浏览一下“客户”表,并计算/显示他们从“购买”表中购买了多少东西。
这是我的php/mysql代码:
$sql = "SELECT CustomerID, Username, Active FROM customers WHERE AND Active = 'Y'";
$result = mysql_query($s
我有一个关于MySQL性能的问题。下面是我的表格:
(约140.000项记录)
CREATE TABLE IF NOT EXISTS `article` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`label` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
`title` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
`intro` text COLLATE utf8_unicode_ci NOT NULL,
`content` text C
我有一个带有国家栏的多字段表。我喜欢查询的结果首先由特定的国家排序,其余的按字母顺序排列。在MySQL中,我会做这样的事情:
Select * from myTable Order By Field(Countries,'Italy'),Countries
在Visual中,我尝试过索引此查询创建的游标:
Select * from myTable Order By Countries
Index on Countries<>'Italy' TAG test
这将首先显示“意大利”的所有结果,但其馀的结果将以不可预测的顺序排列。如何在中实现这一点?