MySQL和NoSQL的

有哪些

关系型数据库(MySQL):Oracle、MySQL、SQL Sever、PostgreSQL、
非关系型数据库(NoSQL):Mongodb、Redis、Hbase、Elasticsearch、Cassandra、Neo4j

区别

  1. 数据存储方式不同
    关系型数据:天然就是表格式的,因此存储在数据表的行和列中,结构化存储。
    非关系型数据:通常存储在数据集中,就像文档、键值对、列存储、图结构。
  2. 扩展方式不同
    在基于web的结构中,
    • 关系型数据库是最难以横向拓展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库没有办法像web Server那样简单的通过添加更多的硬件和服务节点来拓展性能和负载能力。通常要优化机器性能。
    • 非关系型数据存储天然就是分布式的,NoSQL数据库是横向扩展的,可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。
  3. 对事务性的支持不同
    如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么
    • 传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择
    • NoSQL数据库是最终一致性,一般不保证ACID的数据存储系统,具有极高的并发读写性能,真正闪亮的价值是在操作的扩展性和大数据量处理方面

SQL语法中的7个基本指令

『SELECT』、『FROM』、『WHERE』、『GROUP BY』、『HAVING』、『ORDER BY』、『LIMIT』

每个指令的意思分别为:

语法 功能
SELECT 查询字段
FROM 查询表格
WHERE 查询条件
GROUP BY 分组条件
HAVING 组别条件
ORDER BY 显示顺序
LIMIT 显示限制

常用语法语句

SQL排查数据重复

1
2
3
4
-- 方法一: 
SELECT username,COUNT(*) FROM user GROUP BY username HAVING COUNT(*) > 1
-- 方法二:
SELECT * FROM user WHERE username IN (SELECT username FROM user GROUP BY username HAVING COUNT(*) > 1) ;

SQL分页优化

  1. 使用 limit 查询
    1
    2
    3
    4
    -- 从6000开始,查10条数据需要 1.039秒
    SELECT * FROM user LIMIT 6000, 10;
    -- 从6000开始,查100条数据需要 12.191秒
    SELECT * FROM user LIMIT 6000, 100;
  2. 使用 order by 查询
    1
    2
    3
    4
    -- 从6000开始,查10条数据需要 1.044秒
    SELECT * FROM user ORDER BY id LIMIT 6000, 10;
    -- 从6000开始,查100条数据需要 12.047秒
    SELECT * FROM user ORDER BY id LIMIT 6000, 100;
  3. id 优化查询
    1
    2
    3
    4
    -- 从6000开始,查10条数据需要 0.746秒
    SELECT * FROM user WHERE id >= (SELECT id FROM data_server LIMIT 6000, 1) LIMIT 10;
    -- 从6000开始,查100条数据需要 11.874秒
    SELECT * FROM user WHERE id >= (SELECT id FROM data_server LIMIT 6000, 1) LIMIT 100;
  4. 利用 between 查询
    1
    2
    3
    4
    -- 从6000开始,查10条数据需要 0.696秒
    SELECT * FROM user WHERE id BETWEEN 6000 AND 6010;
    -- 从6000开始,查100条数据需要 10.751秒
    SELECT * FROM user WHERE id BETWEEN 6000 AND 6100;