MySQL如何在select中用索引

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL如何在select中用索引相关的知识,希望对你有一定的参考价值。

参考技术A 在字段上加上索引,查询的时候,满足一定条件就可以使用索引:
比如 create table test (id int,name varchar(10));
然后在id上加索引 create index test_index on test(id);
查询的时候 select * from test where id=?就会走索引,如果 是select * from test where name=?
就不走索引,
也有很多情况下索引虽然存在但是却不会生效,具体什么情形下索引无效,需要你自己再去查资料,情况很多,说不完本回答被提问者采纳

MySql查询在Select中用空字符串替换NULL

【中文标题】MySql查询在Select中用空字符串替换NULL【英文标题】:MySql Query Replace NULL with Empty String in Select 【发布时间】:2012-03-22 13:48:15 【问题描述】:

如何用空字符串替换 select 中的 NULL 值? 输出“NULL”值看起来不太专业。

这是非常不寻常的,根据我的语法,我希望它可以工作。 我希望能解释为什么它没有。

select CASE prereq WHEN (prereq IS NULL) THEN " " ELSE prereq end from test;

原始表格的外观、我想要的以及实际打印的示例:

original     wanted      what actually prints
--------     ------      ---------------------
value1       value1      
NULL                     NULL
value2       value2      
NULL                     NULL

正如您所看到的,它与我想要的相反,因此我尝试将 IS NULL 翻转为 IS NOT NULL,当然这并没有解决它。我也试过交换when case的位置,还是不行。

似乎下面给出的 3 个解决方案都可以完成任务。

select if(prereq IS NULL ," ",prereq ) from test
select IFNULL(prereq,"") from test
select coalesce(prereq, '') from test

【问题讨论】:

我认为(prereq IS NULL) 应该只是阅读NULL 【参考方案1】:

试试这个,这也应该摆脱那些空行:

SELECT prereq FROM test WHERE prereq IS NOT NULL;

【讨论】:

这是过滤我不认为 OP 之后的输出 这是我基于他的例子的解决方案。我真的不明白空行比 NULL 值更专业的原因。【参考方案2】:

试试下面;

  select if(prereq IS NULL ," ",prereq ) from test

【讨论】:

null 时如何省略? (不选择它?)【参考方案3】:

试试COALESCE。它返回第一个非 NULL 值。

SELECT COALESCE(`prereq`, ' ') FROM `test`

【讨论】:

【参考方案4】:
SELECT COALESCE(prereq, '') FROM test

Coalesce 将返回从左到右传递给它的第一个非空参数。如果所有的争论都是空的,它会返回空,但我们在那儿强制一个空字符串,所以不会返回空值。

另请注意,标准 SQL 支持 COALESCE 运算符。 IFNULL 的情况并非如此。因此,使用前者是一个好习惯。此外,请记住,COALESCE 支持超过 2 个参数,它会遍历它们,直到找到非空重合。

【讨论】:

同意 IFNULL 的 MySQL 特性值得注意。它适用于 OP 案例,但可能不适用于其他案例。【参考方案5】:

如果你真的必须输出每个值,包括 NULL 值:

select IFNULL(prereq,"") from test

【讨论】:

如果你使用 IFNULL 和 groupBy,那么应该有一个别名:select IFNULL(prereq,"") as n from test group by n.【参考方案6】:

其中一些内置函数应该可以工作:

COALESCE(值,...)

返回列表中的第一个非 NULL 值,如果没有非 NULL 值,则返回 NULL。

IS NULL

测试一个值是否为NULL。

IFNULL(expr1,expr2)

如果 expr1 不为 NULL,IFNULL() 返回 expr1;否则返回 expr2。

【讨论】:

【参考方案7】:

原始形式几乎完美,您只需在 CASE 之后省略 prereq

SELECT
  CASE
    WHEN prereq IS NULL THEN ' '
    ELSE prereq
  END AS prereq
FROM test;

【讨论】:

【参考方案8】:

我在数据库的非必填字段中有空值(NULL 作为默认值)。它们不会导致值“null”显示在网页中。但是,当通过网页输入表单创建数据时,会设置“null”值。这是由于 JavaScript 在通过 AJAX 和 jQuery 提交数据时采用 null 并将其转录为字符串“null”。确保这不是基本问题,因为简单地执行上述操作只是实际问题的创可贴。我还实施了上述解决方案 IFNULL(...) 作为双重措施。谢谢。

【讨论】:

【参考方案9】:
UPDATE your_table set your_field="" where your_field is null

【讨论】:

我没有很好地理解这个问题,对不起!这用空值替换空值,但要解决您的问题,请检查我的第二个答案。【参考方案10】:
select IFNULL(`prereq`,'') as ColumnName FROM test

此查询正在选择“prereq”值,如果任何一个值为 null,它会根据需要显示一个空字符串 因此,它显示所有值,但 NULL 显示为空白

【讨论】:

考虑添加对这段代码的作用的解释。代码示例可能会立即有用,但从长远来看,解释会更有用。

以上是关于MySQL如何在select中用索引的主要内容,如果未能解决你的问题,请参考以下文章

如何查看MySQL执行计划

MYSQL索引问题:索引在查询中如何使用?

如何查看MySQL执行计划呢?

Mysql Innodb存储引擎 select count 太慢,怎么优化

mysql explain详解

MySQL的索引是如何实现的