我试图理解为什么MySQL没有使用正确的索引。
tb_msgs
id int PK
id_user int
id_user_friend int
sent bool
hour int
created_at date
我创建了两个索引:
Index01 => (id_user,id_user_friend) unique
Index02 => (id_user,hour,created_at)
我将执行两种类型的查询:
1) where id_user=xxx
2) where id_user=xxx and hour=x and created_at=curdate() and s
我有这样的疑问:
DELETE FROM events WHERE type = 4 AND author_id IN (?, ?) AND post_id IN (?, ?)
如你所知,author_id IN (? , ?)翻译成author_id = ? OR author_id = ?。那么,我应该在author_id列上创建一个索引吗?
事实上,我正试图了解当MySQL与条件之间存在OR时,它们是如何处理的。我在某个地方读到这句话:
当MySQL遇到OR时,它似乎忽略了索引。
但我不明白它的意义。有人能吗?总的来说,我需要哪些索引来查询上面的内容?
我有个疑问
Select * from tbl1
WHERE
( price > 10
AND qty > 200
AND condition=1
AND name like '%abc%')
我的问题是MySQL将如何处理这个问题?我担心的是,我希望以这种方式运行查询,以便根据条件减少结果。
例如
( price > 10 AND qty > 200 AND condition=1 And name like '%abc%')
首先,MySQL应该过滤具有price > 10的记录,并在生成的数据集上应用下一个
假设我有一个包含字段a、b、c、local_time和e的mysql innoDB表Foo。Foo具有名为foo_index的复合索引:(a,b,c,local_time)
下面的查询会利用foo_index对local_time进行过滤吗?
SELECT count(*) AS cnt
FROM Foo force index(foo_index)
WHERE (a = '332719'
AND b IN ('2', '-3')
AND c = '1'
AND local_time > '20
是否有任何查询规则,说明哪一个最好先过滤才能有最好的性能?示例:
SELECT * FROM table WHERE date <= '2012-08-01' AND random_field = 4684 AND primary_field = 355
vs
SELECT * FROM table WHERE random_field = 4684 AND primary_field = 355 AND date <= '2012-08-01'
哪个更快?查询中where字段子句的位置会影响性能吗?我们应该比较一下
第一场?
先索引字段?
mysql> create index index_questions_on_publishedAt on questions(publishedAt);
ERROR 1317 (70100): Query execution was interrupted
mysql> select count(*) from questions;
+----------+
| count(*) |
+----------+
| 491773 |
+----------+
1 row in set (1.02 sec)
# Is it even reasonable for this q
如果我在中有一个表Mysql,它在字段上有一个多列索引(phone_number,name)
在查询这个表时,如果我只是group by on phone_number,会使用这个索引吗?
如果我执行任何只涉及phone_number的操作,会使用索引吗?
如果我想要group by phone_number,那么会使用这个索引吗?
我有一张MySQL桌:
CREATE TABLE mytable (
id INT NOT NULL AUTO_INCREMENT,
other_id INT NOT NULL,
expiration_datetime DATETIME,
score INT,
PRIMARY KEY (id)
)
我需要以以下形式运行查询:
SELECT * FROM mytable
WHERE other_id=1 AND expiration_datetime > NOW()
ORDER BY score LIMIT 10
如果我将此索引添加到m
我不明白为什么下面的查询要花这么长时间来排序。在分析中,它表明排序需要很长时间,即使有排序行的索引。
MySQL服务器是一台专用机器,基本上只运行当前Debian稳定版本中的MySQL,具有32 GB的物理内存和良好的MySQL配置。表player (INNODB)目前有32,000,000条条目。表player的索引
gameplayer over game, id, server (唯一)
serverplayer优于id, server (索引)
date over date (索引) <--这是我们要根据的排序
下面的查询用于获取游戏中某个玩家的统计数据,从而获得有关玩家、统计数
我在读mysql ,
这是手册中的一个例子。
示例创建一个Multiple-Column Indexes,索引为(last_name,first_name)
CREATE TABLE test (
id INT NOT NULL,
last_name CHAR(30) NOT NULL,
first_name CHAR(30) NOT NULL,
PRIMARY KEY (id),
INDEX name (last_name,first_name)
);
手册上说这个查询将使用索引。
SELECT * FROM test
WHERE
在WHERE查询上,在MySQL子句中安排数据的方式有什么性能上的好处吗?例如,在本例中,对categoryid列进行索引。
SELECT something
FROM table
WHERE date
BETWEEN "date1"
AND "date2"
AND categoryid = "2"
VS
SELECT something
FROM table
WHERE categoryid = 2
AND date
BETWEEN "date1"
AND "date2"
会有什么不同的表现吗?
我想知道执行查询时Mysql操作的顺序。例如,如果我有这样的查询:
select * from Posts where year>2016 and name like '%A%' and veryExpensiveFunction(this,that) and age>12;
如果第一个条件不满足(year>2016),mysql会移动到下一行吗?或者它会确定所有条件的结果,然后说“哇……条件#1甚至都没有满足……所以继续下一行”。似乎如果在我的条件下有一个非常昂贵的函数,我会把它放在最后。
你的观点是什么。我认为它只是在一个大的'and‘链中一个接一
如果我避免使用内置的mysql日期和时间函数,sql的速度( %)会更快吗?
我什么意思?例如:SELECT id FROM table WHERE WEEKOFYEAR(inserted)=WEEKOFYEAR(CURDATE())
MySQL有很多用于处理日期和时间的buil-in函数,而且它们也很适合。但那进取心呢?
上面的sql可以在没有内置函数的情况下重写,比如:SELECT id FROM table WHERE inserted BETWEEN 'date for 1 day of particular week 00:00:00' AND 'last d
我正在设计一个大型数据库。在我的应用程序中,我将有很多行,例如,我当前有一个包含400万条记录的表。我的大多数查询都使用datetime子句来选择数据。在mysql数据库中索引日期时间字段是个好主意吗?
Select field1, field2,.....,field15
from table where field 20 between now() and now + 30 days
我正在努力使我的数据库工作良好,查询运行顺畅。
此外,你认为我应该有什么想法来创建一个高效率的数据库?
我在MySQL数据库中有一个表:
CodeNo Block
a1 a
a2 a
b1 b
b2 b
c1 c
c2 c
我可以使用以下两种方法中的一种进行查询:
select codeno from mytab where block='b' and codeno like 'b%'
另一个选择
select codeno from mytab where codeno like 'b%'
当mytab中有数以百万计的记录时,哪一个在实际场景中更快?还有谁能
我有一个带有时间戳字段的mysql表。
这个表上的大多数查询都是where someIntegerIield=? and theTimestampField is null查询。
我应该使用时间戳字段作为索引的一部分吗?
或者,我是否应该创建和维护另一个字段,当时间戳字段为空时设置为0,否则设置为1?
其他选择也是受欢迎的。
我使用的是mysql数据库,它只有一个表"data"和17,151257 rows.This表有一个列字符串。我希望打印字符串列中包含特定查询字符串(存储在"entered_query“变量中)的所有行,因此我使用了以下方法:
SELECT DISTINCT * from data WHERE string LIKE '%".$entered_query."%' limit 10
很明显,上面的查询要花费太多的时间来执行。
我读过索引是可以使用的,但在这种情况下如何使用呢?
我还考虑过将整个数据划分为10个不同的行,然后使用perl D
例如,索引是(column1,column2)。假设我们运行一个查询select * from some_table where column2 > 3 and column1<2,MySQL会聪明到将查询重新排序到select * from some_table where column1<2 and column2 > 3,然后使用索引(column1,column2)吗
⛰️你好,
我使用一个普通的MySQL查询来连接两个表。
我的查询更简单一些,如下所示(对于这个例子,我只是放了*,否则我就有目标元素了)
SELECT table1.*, table2.*
FROM table1
INNER JOIN table2 ON table1.table1_id = table2.id
WHERE table1.user_id = 5
ORDER BY date DESC
这些代码对我来说很好。但在与我的首席技术官交谈时,他解释说,JOIN实际上是用所有users_ids的所有数据连接两个表,然后在"WHERE table1.user_id = 5
阅读MySQL ,我们看到了这个具有多列索引name的示例表。
CREATE TABLE test (
id INT NOT NULL,
last_name CHAR(30) NOT NULL,
first_name CHAR(30) NOT NULL,
PRIMARY KEY (id),
INDEX name (last_name,first_name)
);
并举例说明索引将或不使用的情况。例如,它将用于这样的查询:
SELECT * FROM test
WHERE last_name='Widenius' AN
在mysql索引中
案例1:
Created the index for two column, but used only one column in where clause.
它会使用索引吗?
案例2:
Created the index for single column, but used index created column and
non-indexed column in where clause.
它会使用索引吗?
在多列索引中索引是如何工作的?where子句中的索引如何工作?