考虑一个包含以下字段的表:
mysql> DESCRIBE my_table;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| pk | int(11) | NO | PRI | NULL | |
| name | varchar(20) | NO | U
我是mySQL新手,试图从甲骨文迁移到mySQL,我有一个索引,需要转换成MySQL。在oracle中,我使用2列创建了这个索引,如下所示:
CREATE INDEX TEST ON TABLE(COL1||'/'||COL2, COL3)
现在,我正试图在mySQL中找到替代方案。我知道我可以在sql中的多个列上创建索引,如下所示:
CREATE INDEX TEST on TABLE(COL1, COL2)
但我希望在多个列上创建索引,这样就可以使用'/‘分隔符将COL1和COL2组合起来,并在其上创建索引。我发现我可以创建一个生成的列并在其上创建索引。所以基本上我
//get the current member count
$sql = ("SELECT count(member_id) as total_members from exp_members");
$result = mysql_query($sql) or die(mysql_error());
$num_rows = mysql_num_rows($result);
if ($num_rows != 0) {
while($row = mysql_fetch_array($result)) {
$total_members = $row['
我有这样的疑问:
SELECT *
FROM view_name
WHERE column1 = something AND column2 = somethingelse
基础表在column1和column2上都有索引,但是MySQL使用了错误的索引。如何强制它使用正确的索引。就像这样:
SELECT *
FROM view_name USE INDEX (table_name.column2)
WHERE column1 = something AND column2 = somethingelse
编辑:有人要求这样做:
SHOW CREATE VIEW vie
编辑:不知道为什么这被标记为重复。我得到的错误是不同的
我试图删除一个主键定义,但由于某种原因,我收到了一个错误。
mysql> ALTER TABLE `aux_sponsors` DROP PRIMARY KEY;
ERROR 1091 (42000): Can't DROP 'PRIMARY'; check that column/key exists
mysql> desc aux_sponsors;
+-------------+--------------+------+-----+---------+-------+
| Field
我有一个包含近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 <
我在MySQL数据库中有一个表,其中包含以下字段:
ID | GENDER | BIRTHYEAR | POSTCODE
用户可以使用任意组合(即SELECT * FROM table WHERE GENDER = 'M' AND POSTCODE IN (1000, 2000);或SELECT * FROM table WHERE BIRTHYEAR = 1973;)中的任何字段来搜索表
在MySQL文档中,它使用了左索引。因此,如果我在所有4列上创建一个索引,那么如果没有使用ID字段,它就不会使用该索引。我是否需要为每个可能的字段组合(ID;ID/性别;ID/BIRTHYE
我有一个问题,下面的脚本只是将行插入到mysql中,而不是检查是否有重复的行,根本没有更新。我一次又一次地尝试,但总是有重复发生。
我到底做错了什么?
if ($completeStatus == "0") {
// Get the default questions responses and insert into database
$questionsAnswered = $_GET['questions'];
foreach( $questionsAnswered as $key => $answers){
$query = "I
我正在尝试优化这个查询:
select id, entity_type
from tv_classified
where entity_type != 2
and state = 0
and dateExpiration < now();
54630 rows in set (1 min 0.42 sec)
所以我在这些列上添加了一个索引:
CREATE INDEX full_expiration_idx ON tv_classified (entity_type, state, dateExpiration)
问题是我的查询仍然花费相同的时间,并忽略索引:
expla
我有这样的疑问:
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 id, name from mytable where age=28 order by name
EXPLAIN输出把我搞糊涂了,我得到
possible_keys : age
key : name
这是否意味着mysql最终决定使用索引'name‘来获取所有行?是否使用了年龄索引?此查询中使用了多少个索引?如果它是mysql最终选择使用的名称索引,那么“age”索引发生了什么?
我有两张桌子如下所示
我在两个表上都有如下所示的综合索引:
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,
假设我有一个查询,如下所示:
SELECT * FROM users WHERE username = 'test' AND somethingelse = 'test'
我想知道是否有必要为两个列都建立索引以进行优化。MySQL是否首先查找所有值为'test‘的username列,然后在这些结果中搜索带有'test’的其他列?或者是同时发生的?
我使用下面的代码将值插入到MySQL表中,并且需要防止用户多次为每个studentname插入相同的priority值。这样做最好的方法是什么?
这张桌子是:
id studentname title academicdiscipline priority
012345678 TEST, NAME Test title 1 Civil 1
012345678 TEST, NAME Test title 2 Civil 2
012345678
我在尝试导入mysql转储时遇到错误:
[ERROR in query 369] Specified key was too long; max key length is 767 bytes
有没有一种简单的方法来找出这是指的是哪个查询,以便我可以诊断它?否则,我需要找出哪一个是第369个查询,然后调查它,以及我的index语句中是否有错误,或者是否存在版本问题。查找这个查询的最好方法是什么?
我有一个10米长的product表,上面有color (int), price (float), weight (float), unitprice (int),等字段.现在,来自Web的用户动态地生成查询,以便使用随机条件(此处颜色是必须的)和顺序从该表查找数据,例如
select * from product where color=1 and price >5 and price <220 and .... order by unitprice limit 75, 25;
select count(*) from product where color=3 and weig
如果我有一个包含3列索引的MyISAM表,如下所示
create table t (
a int,
b int,
c int,
index abc (a, b, c)
) engine=MyISAM;
问题是,下面的查询能否充分利用索引:
select * from t where a=1 and c=2;
换句话说,考虑到索引是一棵b树,MySQL是否可以跳过中间的列,同时仍然对第一列和最后一列进行快速搜索?
EXPLAIN似乎确实显示将使用索引,但是,额外的说明说:Using where; Using index和我不知道这到底是什么意思。
我的查询没有使用索引。
大约花了5秒。
输出仅为500行。这是一个简单的查询。
请在这里找到解释计划和表格结构。
解释计划
mysql> explain SELECT COUNT(*) AS `records_found`
FROM `builds` AS `build`
WHERE (`user_id` = '32762'
AND `country_id` = 'gb'
AND `share` = 0
AN
我有一个关于MySQL优化的问题。假设有一个包含1,000,000个数据行的表market_transition。如果我执行SELECT * FROM market_transition WHERE end_time >= (SOME TIMESTAMP)并返回25,000,是否有任何性能问题?换句话说,如果select语句必须返回大量数据,是否存在性能问题?如果是,如何进行优化?谢谢你的帮助。
我想把数据插入到mysql表中,如果两个字段都是唯一的。例如:
ID VALUE
__ _____
1 abc //INSERT
2 abc //INSERT
3 def //INSERT
1 def //INSERT
2 abc //INSERT SHOULD NOT BE PROCESSED
要做到这一点,最有效的方法就是WHats,而且也只使用mysql。
我已经读取了左边的MySQL索引,所以如果我跨两列field1,field2创建一个索引,我可以这样做:
SELECT .. FROM .. WHERE `field1` = 'x' AND `field2` = 'y';
和
SELECT .. FROM .. WHERE `field1` = 'x';
两个都可以吗?我之所以这样问,是因为有时它会按两列查询,有时只按第一列查询。或者在两种情况下都有两个不同的索引会更好?