有时我会遇到一种奇怪的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
我有以下查询:
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时间戳值的多个记录。因此,我需要
我有一个客户端运行一个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,
我目前使用的是mongodb,但我也已经习惯了MySQL。
我在尝试思考,我们可以有一个双字段索引吗?
例如,想象一下这个表:
Firstname | LastName
============+=================
Bob | Bob
Bob | B
John | Bob
一个索引,在这个索引中,我们可以让数据库将First Name和Last Name作为一个整体来实施唯一性(而不必将开销作为第三个字段作为两者的组合,或者作为散列等
所以如果我们输入{ 'firstname: 'bob',
这可能在MySQL文档中,但我还没有找到它。所以我知道,如果我从数据库中选择一条记录,最快的结果就是我选择的字段和WHERE子句中的字段是索引的一部分。说我有这样的声明:
SELECT a FROM t1 WHERE b=X AND c=Y
什么样的键或键组合才能给我最快的结果?
选项1:(a,b,c)的一个键。
选项2:一个键是(b,c),因为它们在where语句中。
选项3:一个键是(b,c,a),因为b和c在where语句中,而a是最终需要查找的值。(在我看来是合乎逻辑的,但我不知道这是否有任何MySQL意义.)
选项4:两个键,一个是(b,c),另一个是(a)。
抱歉,我是MySQL的
假设我有类似(在MySQL上)的查询,
select xxx from table x
where col_a=yyy and col_b=zzz
假设我有一个col_a和col_b的组合索引。我的问题是,这个组合索引比在col_a或col_b上使用单一索引更有帮助吗?组合索引会像我发布的那样提高查询性能吗?不知道为什么?谢谢。
你好,林
我们有一个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
我们希望使用索
我有一个包含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
我最近一直在读MySQL中的索引,其中一些原则非常简单,但有一个概念仍然困扰着我:基本上,假设在一个假设表中,假设有10列,我们有两个单列索引(分别针对column01和column02 ),加上一个主键列(其他一些列),那么它们是否会用于像这样的简单SELECT查询:
SELECT * FROM table WHERE column01 = 'aaa' AND column02 = 'bbb'
看着它,我的第一个直觉告诉我,第一个索引将检索满足第一个条件的一组行(或者InnoDB中的主键,如果我没弄错的话),第二个索引将检索另一组行。最终的结果集就是这两者的交
我使用嵌套集在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
我有一个关于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查询,并看到第一个查询的类型为ALL。
mysql> EXPLAIN
SELECT one.language_id as filter_id,
one.language_name as filter_name,
two.count as count
FROM books_f9_languages one
INNER JOIN (SELECT language_id,
我们有大约一千万张记录的MySql桌
表中我的are列的后面
c_id,s_id,c_name,domain,log_type,log_time,level,message
我们在这些列上有索引
c_id,s_id,domain,log_type,log_time
我正在运行以下简单的查询,需要很长时间--大约5分钟
SELECT
c_id,
s_id,
c_name,
l_time,
l_type,
m,
UNIX_TIMESTAMP(l_time) AS time
FROM
stats.c_logs
WHERE
domain='xxx'
我有一个叫做'users‘的mysql标签。有两个明显的字段:'user‘和'pass’。
我的身份验证查询如下:
"SELECT pass FROM users WHERE user = ? AND pass = ?"
我认为索引可以加快查询速度。我应该只索引'user‘字段还是还要索引'pass’字段?
也是比较密码与sql查询比与PHP字符串比较更快。
我有一个疑问。我有一个sql查询,
select p from Person p where p.succeedOn IS NOT NULL and p.status=? and p.parentId=? and p.personId>?
我已经在personId上创建了索引。我的同事说,索引不能使用>(大于)或<(小于),但可以使用<和>,因为我们定义了限制。我在谷歌上搜索了一下,但找不到。我正在使用mysql DB。谢谢
我希望在类似于下面的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
我有个问题。在这段时间内,我在mysql中得到了很多行。 为了过滤,我想获取一些信息。 这是我的问题 SELECT COUNT(*) AS cases,
SUM(`item_price`) AS preturile
FROM cases
WHERE opened = 1 AND
trade_id = '1234' 它非常慢..。需要1.5秒什么的 如果我踢出opened = 1,那么看起来是这样的 SELECT COUNT(*) AS cases,
SUM(`item_price`) AS preturile
FROM
编辑:我是一个木偶。因此,在仔细搜索我试图插入的行之后,我的代码中出现了一个bug,这意味着正在插入空字符串。因为这种情况不止一次发生,所以MySQL抛出了一个错误,因为我正在尝试再次插入相同的数据。很抱歉浪费您的时间!Mods,请随意删除此内容。
我的表结构如下:
CREATE TABLE IF NOT EXISTS `foo` (
`user` varchar(80) NOT NULL,
`group` varchar(20) NOT NULL,
`completed` int(1) NOT NULL,
PRIMARY KEY (`user`,`group`)
) ENG