我有一个客户端运行一个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上都有索引,但根据解释,
我有两张桌子如下所示
我在两个表上都有如下所示的综合索引:
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,
我有一个疑问。我有一个sql查询,
select p from Person p where p.succeedOn IS NOT NULL and p.status=? and p.parentId=? and p.personId>?
我已经在personId上创建了索引。我的同事说,索引不能使用>(大于)或<(小于),但可以使用<和>,因为我们定义了限制。我在谷歌上搜索了一下,但找不到。我正在使用mysql DB。谢谢
我们有一个update查询,它需要使用"order“子句来确保更新正确的行,如下所示:
UPDATE `plugin_name_codes`
USE|FORCE INDEX abc
SET `plugin_name_entry_id` = 2
WHERE `plugin_name_codes`.`plugin_name_form_id` = 3
AND (plugin_name_entry_id IS NULL)
ORDER BY /*plugin_name_form_id asc, plugin_name_entry_id asc,*/ id ASC
LIMIT 1
我们希望使用索
我希望在类似于下面的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
假设您有一个表,其中包含大约100万行的id,a,b,c,d,e,f,g。然后,可以使用多个组合中的多个WHERE ...AND...AND...etc条件进行查询。例如,a AND b AND e、a AND f AND g或e AND f AND g。
因此,要考虑所有组合,您必须创建多个复合索引,但如果a,b,c,d,e,f,g的范围从1,10,因此没有零,该怎么办?
是否可以简单地为每个起始变量创建一个复合,比如a,b,c,d,e,f,g和b,a,c,d,e,f,g等。并且在查询时做类似这样的事情
#b and e have not been chosen
SELECT * F
有时我会遇到一种奇怪的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
例如,table FOO
id name type
---------------------------------------------
bigint(20) varchar(30) smallint(4)
唯一密钥name_type (名称,类型)。
将为(名称,类型)创建索引。但是,如果许多查询涉及诸如type=aNumber之类的类型,我是否需要为类型单独创建索引?
换句话说,index(name,type)包括index(type)吗?
那么mysql和oracle db呢?
目前,我有一个MYSQL查询正在执行中。我需要在查询中的两个字段上创建索引:cancel和complete。执行此操作的最佳方法是什么? SELECT* FROM table WHERE cancel != 'CANCEL' AND complete IN ('COMPLETE','TAKEN_BACK')
我有一个关于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
我有以下查询:
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时间戳值的多个记录。因此,我需要
我有两个数据库表:“地点”和“翻译”。对地名的翻译是通过从" places“中选择记录来完成的,这些记录尚未翻译到指定的语言:
SELECT `id`, `name`
FROM `places`
WHERE `id` NOT IN (SELECT `place_id` FROM `translations` WHERE `lang` = 'en')
这在7000个地方的记录中很好,但当翻译数量达到5000份时,它就崩溃了。从那时起,查询大约需要10秒,并返回错误:
2006 - MySQL服务器已经消失
据我所知,这里的主要问题是返回到许多结果的子查询,但是如果我需
好的,我在这里有一个SQL查询:
SELECT a.id,... FROM article AS a WHERE a.type=1 AND a.id=3765 ORDER BY a.datetime DESC LIMIT 1
我想按国家和id获取准确的文章,并为该索引创建两列type和id。Id也是主键。我使用EXPLAIN关键字来查看使用了哪个索引,它使用的不是多列索引,而是主键索引,但我确实在创建索引时准确地设置了where内容。
MySQL是否使用主键索引而不是多列索引,因为主键索引更快?或者我应该强制MySql使用多列索引?
附注:刚刚注意到,当只有一个结果行时,使用order是很愚
我正在尝试创建一个或多个额外的索引来加快下面的查询速度。所有的键都是主键(除了表A上的id ),所以它们已经有一个默认的btree索引与之关联。表A上的id也已经有一个与之关联的索引,因为它是一个MUL键,这意味着它是非惟一索引的一部分。
Select A.id
From TableA A
Inner join TableB B
On A.address = B.address
And A.code = B.code
Group by A.id
Having count(distinct B.user) = 1;
以下是上述表格的当前索引:
mysql>
我目前使用的是mongodb,但我也已经习惯了MySQL。
我在尝试思考,我们可以有一个双字段索引吗?
例如,想象一下这个表:
Firstname | LastName
============+=================
Bob | Bob
Bob | B
John | Bob
一个索引,在这个索引中,我们可以让数据库将First Name和Last Name作为一个整体来实施唯一性(而不必将开销作为第三个字段作为两者的组合,或者作为散列等
所以如果我们输入{ 'firstname: 'bob',