我正在将一些CREATE查询从MySQL转换到Postgres,并遇到了在不同表上创建多个名称相同的键(也称为索引)时遇到的问题。
例如,在MySQL中,可以有多个CREATE查询,这些查询包含相同的索引创建语法: KEY OrgId (SiteId) --参见本文末尾的MySQL示例。
在Postgres中,我理解您不能在CREATE查询中定义索引,因此我运行两个单独的Postgres查询来定义索引:
CREATE INDEX OrgId ON MenuTypes USING btree (SiteId);
CREATE INDEX OrgId ON Pages USING btree (S
我正在处理一个查询,如果可能的话,我希望提高它的效率。
桌子是这样的:
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
FULLTEXT (title)
) Engine=MyISAM;
需要有效率的查询:
SELECT * FROM articles
WHERE
MATCH (title)
AGAINST ('+MySQL' IN BOOLEAN MODE)
AND title <>
所以我有一个MYSQL db,其中布尔值存储为binary(1)。我要研究为什么某些查询是缓慢的,即使在相关列上有一个索引。问题是,在构建SELECT查询时,系统使用了setBoolean方法PreparedStatement,据我所知,该方法将值转换为MYSQL TINYINT。查询找到了正确的行,但没有使用索引,因为索引位于二进制列上。但是,如果我使用setString方法并将布尔值转换为字符串,即'0' for false和'1' for true,MYSQL就能够使用索引并快速找到想要的行。
基本上,第一个查询是我使用setBoolean时得到的,第二个
我有下面的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中有以下查询:
SELECT sid, date
FROM table
WHERE wid = 12938248 AND url = 'example.com/landingpage'
只要我有这样的索引:
CREATE INDEX testindex ON table (wid,url,sid,date)
MySQL是否能够从索引本身检索sid、日期,还是需要访问磁盘?
谢谢!
UPDATE album SET x=1 WHERE store_id=:store_id && type=:type && time<:time
我有一个Mysql更新查询,我的问题是如何设置这个查询的索引?
我在phpMyadmin中创建索引,我应该选择store_id,键入,时间在一起并创建一个索引吗?
我有一个包含200k个条目的表,其中列为INT,我想创建一个索引来加快查询速度。这是我想要执行的查询:SELECT A,B,C,D,E FROM table WHERE A=23 and (B=45 or C=43)。我创建了以下索引:B、ACD、C、ABC。
使用EXPLAIN命令,我发现MySQL选择索引ACD。因此,我不断地在表中填充更多的值,并且我意识到MySQL正在上面的索引之间切换(并不总是同一个索引)。
由于有许多插入,因此具有不同的索引将导致性能问题,我们可以假设该表由需要不同列的其他查询访问,其中每个索引都有意义。
我知道USE INDEX(),但我想知道我们是否应该信任My
我有一个包含近10亿条记录的MyISAM表,其中有三个字段: a、b和c。
该表在列a、b和c上按该顺序具有btree多字段索引。分析索引显示,该索引中字段的基数为:
a: 112 (整型)
b: 2694 (整型)
c: 936426795 (日期时间)
这意味着对于a,大约有100个不同的值,对于b,大约有20个不同的值,对于a和b的每个组合,都有大量的c的值。
我想在a的特定值上执行查询,在c上执行范围查询。
select a, b, c from mytable where a=4 and c >= "2011-01-01 00:00:00" and c <
我正在尝试优化表单SELECT SQL_NO_CACHE col FROM TABLE ..的查询。当我第一次连接到数据库并执行查询时,大约需要9秒。当我第二次执行查询时,几乎需要0.1秒。我将放在查询中,以确保mysql不会从缓存中读取结果。我的问题是,为什么在连接到数据库(mysql -uroot ... )之后第一次执行查询所需的时间比后续执行的时间要长得多。查询的实际执行时间是多少?
我想知道,如果条件包含了列中所有可能的值,那么是否需要设置一个条件语句来删除标准。示例如下:
SELECT product FROM Table where condition = 'condition' AND class <= 255;
假设类列是TINYINT unsigned NOT NULL DEFAULT 0的。MySQL是否仍会忠实地扫描列以检查class <= 255是否?假设我有1000万行,那么上面的查询对下面的语句是如何执行的呢?
SELECT product FROM Table where condition = 'conditio
我有一个包含50万行的MySQL数据库。
我有一个500,000个组合字符串的列表,如First_Name和Last_Name。
我试图使用类似的查询搜索50万行。
select count(*) FROM data WHERE first='wadaw' AND last='wdvv';
问题是它花费了太多的时间,我使用的是多个线程,考虑到MySQL之间的通信开销和查询的运行时间,它似乎不太有效。我想从改变数据库的设置开始改进,以便更好地适应我的数据,并为其优化MySQL数据库。
根据我在搜索算法方面的经验,一个未排序的列表将使用n*log(n)和N*log(
我正在读“高性能MySQL",O‘’Reilly,第二版。第122页:
MySQL不能在索引中执行类似的操作。等
在同一页中,后面的示例是(对参与者、标题、prod_id有一个索引):
EXPLAIN SELECT * FROM products JOIN ( SELECT prod_id FROM products WHERE actor='SEAN CARREY' AND title LIKE '%APOLLO%' ) AS t1 ON (t1.prod_id=pr
我在MySQL表table中有以下数据
ID:int(11)这是主键
Date:日期
然后我运行MySQL查询:
SELECT * from table WHERE Date=CURDATE() and ID=1;
这需要0.6到1.2秒。
有没有办法优化这个查询以更快地获得结果?
我的目标是看看我是否已经有了这个ID的今天的记录。
我使用的是mysql服务器,在该服务器中,我使用以下设置设置了慢查询日志
log-slow-queries=/var/log/mysql/mysql-slow-queries.log
long_query_time=1
log-queries-not-using-indexes
我已经在mysql事件中为每分钟设置了以下事件。
UPDATE mytable SET playing = 0
WHERE playing != 0
AND ( TIMESTAMPDIFF( MINUTE , lastplayed, NOW( )) >10 )
OR (
我被一个简单的sql查询的性能所困扰。
查询:
SELECT * FROM company
WHERE
(IDCompanyMain in (ID1, ID2...) or IDCompany in (ID1, ID2...))
and Network="XXX";
每个字段都有索引,大约有10M行。每个查询都有1到100个ids。
每次查询需要4秒以上!如果我删除其中一个条件,结果将在毫秒内准备就绪。
EXPLAIN说,mysql使用网络索引,有大约5百万行有问题。如果尝试强制某些索引(USE或FORCE),则不使用任何索引。
问题
我有一个大约200万行( 115 MB)的表,它即将变得更大。当在表上运行一些实用程序脚本时,我注意到我的一个查询花费了很长时间(15+秒),而一个几乎相同的查询用了不到半秒的时间。以下是查询:
查询1:
SELECT `id` FROM `my_table` WHERE `my_column`='test' ORDER BY `id` LIMIT 28000, 1000
Execution time: 0.204 seconds
查询2:
SELECT `id` FROM `my_table` WHERE `my_column`='test' ORDER
我有一个大约2亿行的表,如下所示:
id, name, timestamp, class
我在每一列上都有一个索引,并且我试图运行这样的查询:
SELECT name
FROM t
WHERE timestamp >= date_x AND
timestamp < date_y AND
class='class_a'
这个查询只在class上使用索引,当date_x和date_y大约是一个月时,一个部分解释说它会看到大约1250万行,这比timestamp上的索引要少。
当日期范围较小时,此查询显然返回得很快,但随着范围的增加,该查询很快就会
我们正在寻找mysql查询,它提供准确的like '%%'查询,但使用全文搜索MATCH AGAINST。
例如
Select id,name from table where jobtitle like '%java software engineer in google%'
它给出了包含google中java软件工程师行的所有行。
但是,如果我们使用下面的mysql查询,则会给出不同的结果
Select id,name from table
where MATCH(jobtitle) AGAINST ('+java software engineer
首先,我要指出,我绝不是一个数据库专家。我确实知道如何用几种需要数据库后端的语言编写应用程序,而且我对MySQL、Microsoft和现在的MEMSQL比较熟悉--但我也不是数据库方面的专家,因此我们非常感谢您的输入。
我一直在开发一个应用程序,需要交叉引用几个不同的表。我最近遇到的一个非常简单的例子是,我必须:
在每天的基础上,把600 K到1米的记录拉到一个临时的桌子上。
比较一下新的数据拉力和旧的数据拉力之间发生了什么变化。将该信息记录在单独的表中。
用新记录重新填充表。
运行#2是一个类似以下查询的查询:
SELECT * FROM (NEW TABLE) LEFT
我在MySQL中有一个有两列的表
id int(11) unsigned NOT NULL AUTO_INCREMENT,
B varchar(191) CHARACTER SET utf8mb4 DEFAULT NULL,
身份是PK。
我需要使用这两种方法之一在查询中进行查找。id in (:idList) or B in (:bList)
如果有一个包含这两列的复合索引,那么这个查询的性能会更好吗?
在使用ORDER BY时,我在使用MySQL查询时遇到了巨大的性能问题
下面的查询返回超过5M行,执行速度非常快(<0,1s)
SELECT * FROM logins WHERE users_id = 1
一旦我添加了ORDER BY,查询就会减慢到30秒以上
SELECT * FROM logins WHERE users_id = 1 ORDER BY id
id是PRIMARY KEY,而users_id有一个INDEX。
因为users_id和id都是索引的,所以我不明白为什么第二个查询花费了这么长的时间。
当我运行EXPLAIN时,使用的key总是users_id。
如何才能
很简单的问题,但很难找到解决办法。具有2,498,739行的Address表有一个min_ip和max_ip字段。这些是用于过滤的表的核心锚。
查询非常简单。
SELECT *
FROM address a
WHERE min_ip < value
AND max_ip > value;
因此,为min_ip和max_ip创建索引以加快查询速度是合乎逻辑的。
为下列事项创建的索引。
CREATE INDEX ip_range ON address (min_ip, max_ip) USING BTREE;
CREATE INDEX min_ip ON address (mi
考虑一个包含以下字段的表:
mysql> DESCRIBE my_table;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| pk | int(11) | NO | PRI | NULL | |
| name | varchar(20) | NO | U
我正尝试在我的数据库中运行以下查询:
SELECT * FROM ts_cards WHERE ( cardstatus= 2 OR cardstatus= 3 ) AND ( cardtype= 1 OR cardtype= 2 ) ORDER BY cardserial DESC LIMIT 10;
所有三个字段(cardstatus、cardtype和cardserial)都被编入索引:
mysql> SHOW INDEX FROM ts_cards;
+----------+------------+----------------+--------------+